结构
循环语句
-
for循环语句
-
while循环语句
-
until循环语句
for语句的结构
读取不同的变量值,用来逐个执行同一组命令
for 变量名 in 取值列表 do 命令序列 done
[root@localhost ~]# files=`ls` [root@localhost ~]# echo $files abc.txt addrs.txt anaconda-ks.cfg dead.letter demo.sh first.sh func.sh guess.sh ifcfg-ens33 initial-setup-ks.cfg myping.sh res.txt useradd.sh user.txt us.txt 公共 模板 视频 图片 文档 下载 音乐 桌面 [root@localhost ~]# for x in $files > do > echo $x > done abc.txt addrs.txt anaconda-ks.cfg dead.letter demo.sh first.sh func.sh guess.sh ifcfg-ens33 initial-setup-ks.cfg myping.sh res.txt useradd.sh user.txt us.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost ~]# for (( e=1;e<=10;e++ )) > do > echo $e > done 1 2 3 4 5 6 7 8 9 10
[root@localhost ~]# for (( e=2;e<=10;e=$[e+2] )) > do > echo $e > done 2 4 6 8 10
for语句应用示例
示例1
- 批量添加用户
- 用户名存放在users.txt文件中
- 初始密码均设为123456
- 验证脚本
[root@localhost ~]# vim user.txt [root@localhost ~]# us=`cat user.txt` [root@localhost ~]# echo $us zhangsan lisi wanqwu [root@localhost ~]# for name in $us > do > useradd -m -p 123456 $name > done
示例2
- 根据IP地址检查主机状态
- IP地址存放在ipadds.txt文件中
- 使用ping命令检测各主机的连通性
#!/bin/bash addrs=`cat /root/addrs.txt` for addr in $addrs do res=`ping $addr -c 1 -W 1 | grep "packet loss" | awk -F, '{print $3}'` echo $addr $res >> res.txt done
while语句的结构
重复测试某个条件,只要条件成立则反复执行
while 条件测试操作 do 命令序列 done
while语句应用实例
示例1
- 批量添加用户
- 用户名称以stu开头,按数字顺序进行编号
- 一共添加20个用户
- 初始密码均设为123456
#!/bin/bash a=1 while [ $a -le 20 ] do useradd stu$a echo 123456 | passwd --stdin stu$a let a++ done
示例2
- 猜数字游戏
- 通过变量RANDOM获得随机数
- 提示用户是否猜中,猜中后退出循环
#!/bin/bash a=0 b=0 price=$(echo $[$RANDOM % 1000]) while [ $a -eq 0 ] do read -p "please enter a number:" num if [ $num -eq $price ];then let b++ echo "Bingo!You tried $b times." let a++ elif [ $num -gt $price ];then let b++ echo "Too large,please try again" elif [ $num -lt $price ];then let b++ echo "Too small,please try again" fi done
until语句的结构
重复测试某个条件,只要条件不成立则反复执行
until 条件测试操作 do 命令序列 done
示例
计算1~50的和值
#!/bin/bash i=0 s=0 until [ $i -eq 51 ];do let s+=i;let i++ done echo $s