Shell脚本 (三)for循环 while循环 case分支语句
################for循环语句的结构#############
使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。在这里,取值表 称为for语句的执行条件,其中包括多个属性相同的对象、需要预先指定(如通讯录、IP黑名单) · 语法样式 for 变量名 in 取值列表 do 命令序列 done · #####for循环语句列子#### 需求:根据人事部门给出的员工姓名拼音列表,在Linux服务器中添加相应的用户账号, 初始密码均设置为“123456”,其中,员工列表的账户数量不固定,不相同。 · 1.编辑文本 [ [email?protected] ~]# cd /opt [ [email?protected] opt]# vi users.txt zhang3 li4 wang5 sun6 2.编辑脚本 ##创建多个用户 [ [email?protected] opt]# vi uaddfor.sh #!/bin/bash ULIST=$(cat /opt/users.txt) for UNAME in $ULIST do useradd $UNAME echo "123456" | passwd --stdin $UNAME &>/dev/null done · ##删除uaddfor.sh脚本添加的用户 cd opt vi udelfor.sh #!/bin/bash ULIST=$(cat /opt/users.txt) for UNAME in $ULIST do userdel -r $UNAME &>/dev/null id $UNAME done · ##IP地址检查主机状态 [ [email?protected] opt]# vi ipadds.txt 192.168.10.1 192.168.10.2 192.168.10.3 192.168.10.4 · [ [email?protected] opt]# vi chkhosts.sh #!/bin/bash HLIST=$( cat /opt/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 [ [email?protected] opt]# chmod +x chkhosts.sh [ [email?protected] opt]# ./chkhosts.sh host 192.168.32.1 is down. host 192.168.32.2 is up. host 192.168.32.3 is down. host 192.168.32.11 is up. · #############while循环语句的结构########### for循环语句非常适合列表对象无规则,且列表来源固定的场合,而对于需求控制的循环次数,操作对象按数字顺序的编号,按特定的条件执行重复操作等情况,则更适合使用一种循环语句----while语句。 while语句使用流程:首先判断while后条件测试操作结果,如果条件成立,则执行do......done循环体;返回while后,再次判断条件测试结果,如果条件仍然成立,则继续折行循环体;再次返回while后,判断条件测试结果........如此循环,直到while后的条件测试结果不在成立为止,最后跳到done语句,表示循环结束。 whlie特点:重复测试某个条件,只要条件成立则反复执行 · 语法样式 while 条件测试操作 do 命令序列 done · #####while循环语句实例##### 批量添加用户 用户名称以stu开头,按数字顺序进行编号 一共添加20个用户,即stu1、stu2、……、stu20 初始密码均设为123456 · [ [email?protected] opt]# vi uaddwhile.sh #!/bin/bash PREFIX="stu" i=1 while [ $i -le 20 ] do useradd ${PREFIX}$i echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null let i++ done [ [email?protected] opt]# chmod +x uaddwhile.sh [ [email?protected] opt]# ./uaddwhile.sh · ###删除用户### [ [email?protected] opt]# cd /opt [ [email?protected] opt]# vi udelwhile.sh #!/bin/bash PERFIX="stu" i=1 while [ $i -le 20 ] do userdel -r ${PERFIX}$i let i++ done [ [email?protected] opt]# chmod +x udelwhile.sh [ [email?protected] opt]# ./udelwhile.sh · · ###实例2### 猜商品价格游戏 通过变量RANDOM获得随机数 提示用户猜测并记录次数,猜中后退出循环 · [ [email?protected] opt]# vi pricegame.sh #!/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 "恭喜你答对了,实际价格是 $PRICE" echo "您总共猜对了 $TIMES 次" exit 0 elif [ $INT -gt $PRICE ] ; then echo "太高了!" else echo "太低了!" fi done · ###解释### 1、while true 是代表无限循环下去 2、$RANDOM是Bash的内部函数,随机取值范围在0 - 32767之间 · [ [email?protected] opt]# chmod +x pricegame.sh [ [email?protected] opt]# ./pricegame.sh 商品的实际价格范围0-999,猜猜看是多少 请输入你猜猜的价格数目:900 太高了! 请输入你猜猜的价格数目:800 太高了! 请输入你猜猜的价格数目:325 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |