前言:当面对各种列表重复任务时,使用if语句已经难以满足要求,而顺序编写全部代码更是显得异常繁琐,困难重重。使用循环、分支等其他程序控制结构,从而能够轻松完成更加复杂、强大的功能。
1、使用for循环语句
for语句结构:
for 变量名 in 取值列表
do
命令序列
done
for循环语句的结构:
1)根据姓名列表批量添加用户
准备员工列表文件users.txt,然后编写一个名为uaddfor.sh的脚本,从users.txt文件中读取各用户名称,重复执行添加用户,设置初始密码的相关操作。
[root@localhost ~]# vim /root/user.txt //用作测试的列表文件
chenpeng
dengchao
zhangjie
批量添加用户的脚本
[root@localhost ~]# vim uaddfor.sh
#!/bin/bash
ulist=$(cat /root/user.txt)
for uname in $ulist
do
useradd $uname
echo "123456" | passwd --stdin $uname &> /dev/null
done
[root@localhost ~]# chmod +x uaddfor.sh //添加执行权限
[root@localhost ~]# ./uaddfor.sh //测试并确认执行结果
[root@localhost ~]# tail -3 /etc/passwd
chenpeng:x:501:501::/home/chenpeng:/bin/bash
dengchao:x:502:502::/home/dengchao:/bin/bash
zhangjie:x:503:503::/home/zhangjie:/bin/bash
2)若要删除uaddfor.sh脚本添加的用户,只需要将上面脚本中添加用户的命令改为删除的即可。
[root@localhost ~]# cp uaddfor.sh udelfor.sh
[root@localhost ~]# vim udelfor.sh //批量删除用户的脚本
#!/bin/bash
ulist=$(cat /root/user.txt)
for uname in $ulist
do
userdel $uname
echo "123456" | passwd --stdin $uname &> /dev/null
done
[root@localhost ~]# chmod +x udelfor.sh
[root@localhost ~]# ./udelfor.sh
[root@localhost ~]#> id: chenpeng:无此用户
执行脚本之后发现用户已经删除
3)根据ip地址列表查看主机状态
首先建立ip地址列表文件ipadds.txt,然后编写一个名为chkhosts.sh的shell脚本,从ipadds.txt文件中读取各服务器的ip地址,重复执行ping连通性测试,并根据测试结果输出相应的提示信息。
[root@localhost ~]# vim /root/ipadds.txt //用作测试的列表文件
192.168.1.1
192.168.1.2
192.168.1.10
[root@localhost ~]# vim /chkhosts.sh //循环检查各主机的脚本
#!/bin/bash
hlist=$(cat /root/ipadds.txt)
for ip in $hlist
do
ping -c 3 -i 0.2 -W 3 $ip &> /dev/null
if [ $? -eq 0 ]
then
echo "host $ip is up"
else
echo "host $ip is down"
fi
done
执行脚本
[root@localhost /]# chmod +x chkhosts.sh
[root@localhost /]# ./chkhosts.sh
host 192.168.1.1 is up
host 192.168.1.2 is down
host 192.168.1.10 is down
2、使用while循环语句
For循环适合无规律,列表已固定,while循环适合要求循环次数,操作对象按数字顺序编号,按特定条件执行重复操作的情况。
while语句的语法结构:
while 条件测试操作
do
命令序列
done
while循环语句的结构: