语法结构:
- for 变量名 [ in 取值列表]
- do
- 循环体
- done
示例1:
1、需求:自动循环创建10个用户
2、演示:
[root@localhost ~]# vim for.sh #脚本编写
#!/bin/bash
for i in {1..10}
do
useradd "user$i"
done
[root@localhost ~]# bash for.sh #执行脚本
示例2:ping测试主机
1、需求:通过循环工具,探测全网主机。将在线主机记录在文本中。
2、分析:
1、编写常规ping测试脚本(无循环)
-
2、添加循环语句。for i in {2..254}
-
3、优化脚本(后台执行,清空脚本,循环完成提示,wait间隔)
-
3、演示:
-
[root@localhost ~]# vim ping1.sh #脚本编写 ##1、编写ping脚本 #!/bin/bash ping -c1 -W1 192.168.151.151 &> /dev/null if [ $? -eq 0 ] then echo "192.168.151.151" | tee -a ip.txt else echo "192.168.151.151" >> downip.txt fi [root@localhost ~]# chmod +x ping1.sh #脚本授权 [root@localhost ~]# ./ping1.sh #执行脚本
-
[root@localhost ~]# vim ping1.sh #脚本编写
##2、使用循环
#!/bin/bash
>ip.txt
>downip.txt
for i in {2..254}
do
ip=192.168.151.$i
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ]
then
echo "$ip" | tee -a ip.txt
else
echo "$ip" >> downip.txt
fi
done
[root@localhost ~]# ./ping1.sh #执行脚本
[root@localhost ~]# vim ping1.sh #编写脚本
##3、优化脚本
#!/bin/bash
>ip.txt #清空文本记录
>downip.txt
for i in {2..254}
do
{
ip=192.168.151.$i
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ]
then
echo "$ip" | tee -a ip.txt
else
echo "$ip" >> downip.txt
fi
}&
done
wait #等待前一个程序执行完毕。在执行下一个命令。
echo "在线主机测试完毕。"
[root@localhost ~]# ./ping1.sh #执行脚本