################for循环语句的结构############# 使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。在这里,取值表 称为for语句的执行条件,其中包括多个属性相同的对象、需要预先指定(如通讯录、IP黑名单) · 语法样式 for 变量名 in 取值列表 do   命令序列 done · #####for循环语句列子#### 需求:根据人事部门给出的员工姓名拼音列表,在Linux服务器中添加相应的用户账号, 初始密码均设置为“123456”,其中,员工列表的账户数量不固定,不相同。 · 1.编辑文本 [root@localhost ~]# cd /opt [root@localhost opt]# vi users.txt zhang3 li4 wang5 sun6 2.编辑脚本 ##创建多个用户 [root@localhost 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地址检查主机状态 [root@localhost opt]# vi ipadds.txt 192.168.10.1 192.168.10.2 192.168.10.3 192.168.10.4 · [root@localhost 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 [root@localhost opt]# chmod +x chkhosts.sh [root@localhost 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 · [root@localhost 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 [root@localhost opt]# chmod +x uaddwhile.sh [root@localhost opt]# ./uaddwhile.sh · ###删除用户### [root@localhost opt]# cd /opt [root@localhost opt]# vi udelwhile.sh #!/bin/bash PERFIX="stu" i=1 while [ $i -le 20 ] do
userdel -r ${PERFIX}$i let i++ done
[root@localhost opt]# chmod +x udelwhile.sh [root@localhost opt]# ./udelwhile.sh · · ###实例2### 猜商品价格游戏 通过变量RANDOM获得随机数 提示用户猜测并记录次数,猜中后退出循环 · [root@localhost 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之间 · [root@localhost opt]# chmod +x pricegame.sh [root@localhost opt]# ./pricegame.sh 商品的实际价格范围0-999,猜猜看是多少 请输入你猜猜的价格数目:900 太高了! 请输入你猜猜的价格数目:800 太高了!

请输入你猜猜的价格数目:325 恭喜你答对了,实际价格是 325 您总共猜对了 13 次 · #############case分支语句的结构############# 针对变量的不同取值,分别执行不同的命令序列 · ###语法样式 case 变量值 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;;  …… ) 默认命令序列 esac · ###case使用特点 · case行尾必须为单词"in",每一模式必须以")"结束 双分号";;" 表示命令序列结束 模式字符串中,可以用方括号表示已个连续的范围,如"[0-9]";还可以用竖杠符号"|"表示,如"A|B" 最后的"" 表示默认模式,其中的*相当于通配符。 · ###示例1 击键类型识别 提示用户输入一个字符 判断出该字符是字母、数字或者其他字符 · vi hitkey.sh #!/bin/bash read -p "请输入一个字符,并Enter键确认:" KEY case "$KEY" in [a-z] | [A-Z]) echo "您输入的是 字母." ;;
[0-9]) echo "您输入的是 数字." ;; *)
echo "您输入的是 空格、功能键或者是其他控制字符." esac · [root@localhost opt]# chmod +x hitkey.sh [root@localhost opt]# ./hitkey.sh 请输入一个字符,并Enter键确认:A 您输入的是 字母. [root@localhost opt]# ./hitkey.sh 请输入一个字符,并Enter键确认:a 您输入的是 字母. [root@localhost opt]# ./hitkey.sh 请输入一个字符,并Enter键确认:1 您输入的是 数字. [root@localhost opt]# ./hitkey.sh
请输入一个字符,并Enter键确认: 您输入的是 空格、功能键或者是其他控制字符.