Loop:
Loop:循环开始条件和结束条件
Break:命令允许跳出所有循环(终止执行后面的左右循环)
Continue:命令与break类似,它不会跳出所有循环,只跳出当前循环
Exit 0:跳出/终止
Sleep 2:延迟2s执行
Echo -n:不换行显示
For循环:遍历所有变量
格式:
1 2 3 4 5
| for [varname] in {values} do 命令序列1 命令序列2 done
|
例:根据姓名列表批量创建用户
首先创建一个文本文件user.txt
user1
user2 //这些都是用户名
user3
……..等
创建脚本useradd.sh
1 2 3 4 5 6 7 8
| #!/bin/bash a=`cat /root/user.txt` for q in $a do useradd $q echo “123.com” | passwd --stdin $q &> /dev/null echo “$q users finished” done
|
例:根据IP地址列表检查主机状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #!/bin/bash
a=`cat /root/dizhi.txt`
for q in $a do ping -c 2 -i 0.1 -w 1 $q &> /dev/null if [ $? -eq 0 ];then echo "host $q is up." else echo "host $q is down." fi done
|
While:只要条件成立,执行循环
格式:
1 2 3 4 5
| while 条件语句 do 命令序列1 命令序列2 done
|
例:批量添加规律编号的用户
1 2 3 4 5 6 7 8 9 10
| #!/bin/bash
name="zx" i=1 while [ $i -le 20 ] do useradd ${name}$i echo "123456" | passwd --stdin ${name}$i &> /dev/null let i++ done
|
*例:批量删除规律编号的用户**
1 2 3 4 5 6 7 8 9
| #!/bin/bash
name="zx" i=1 while [ $i -le 20 ] do userdel -r ${name}$i let i++ done
|
例:猜猜商品的价格
RANDOM:随机获得一个小于2的16次方的随机数(65536)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #!/bin/bash
price=`expr $RANDOM % 1000` times=0 echo "商品实际价格范围为0-999,猜猜看是多少?"
while true do read -p "请输入你猜测的价格数目:" int let times++ if [ $int -eq $price ];then echo "恭喜你猜对了,实际价格是 $int" echo "你总共猜测了$times次 " exit 0 elif [ $int -gt $price ];then echo "太高了" else echo "太低了" fi done
|
例:求1加到100的总和
1 2 3 4 5 6 7 8 9
| #!/bin/bash i=1 s=o while [ $i - le 100 ] do s=$(( $s +$i )) i=$(( $i+1 )) done echo “sum is :$s”
|
总结:
1)和for的对比
For:从开始就定义了范围,你的输出就在你的定义范围内
While:用在列表中,逐级增加
2)如何避免while进入死循环:exit 0
until:不定循环只要条件不成立,循环就会一直继续
格式:
1 2 3 4 5
| until 条件判断(必须加!号取反值) do 命令序列1 命令序列2 done
|
例:列出0-9
1 2 3 4 5 6 7
| #!/bin/bash a=0 until [ ! $a -lt 10 ] do echo $a let a++ done
|