Shell编程之循环语句

 

结构

循环语句

  • 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

  

上一篇:shell基本操作(下)


下一篇:八、安装配置OpenStack