千家信息网

Shell脚本之case语句与循环语句

发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,case语句的结构针对变量的不同取值,分别执行不同的命令序列case 变量值 in //变量值即$变量名模式1)命令序列1;;
千家信息网最后更新 2024年11月28日Shell脚本之case语句与循环语句

case语句的结构

针对变量的不同取值,分别执行不同的命令序列

case    变量值 in                  //变量值即$变量名模式1)命令序列1;;                        //双分号结束语句模式2)命令序列2;;                        //双分号结束语句......*)   默认命令序列esac

case语句执行流程

case语句应用演示

[root@localhost opt]# vim demo01.sh#!/bin/bashread -p "请输入成绩 (0-100) : " keycase $key in [8-9][0-9]|100)        echo "你的成绩优秀" ;; 7[0-9])        echo "你的成绩良好" ;; 6[0-9])        echo "你的成绩合格" ;; [0-9]|[1-5][0-9])        echo "你的成绩不合格" ;; *)        echo "你输入的成绩有误,请重新输入"esac[root@localhost opt]# source demo01.sh请输入成绩 (0-100) : 88你的成绩优秀[root@localhost opt]# source demo01.sh请输入成绩 (0-100) : 76你的成绩良好[root@localhost opt]# source demo01.sh请输入成绩 (0-100) : 66你的成绩合格[root@localhost opt]# source demo01.sh请输入成绩 (0-100) : 59你的成绩不合格[root@localhost opt]# source demo01.sh请输入成绩 (0-100) : 120你输入的成绩有误,请重新输入

for语句的结构

读取不同的变量值,用来逐个执行同一组命令

for 变量名 in  取值do命令序列done

for语句的执行流程

for语句应用演示

批量添加用户
1.用户名存放在users.txt文件中,每行一个
2.初始密码均设为123456
3.验证脚本

[root@localhost opt]# vim users.txtSimitaBoke[root@localhost opt]# vim users.sh#!/bin/bashTMP=$(cat /root/users.txt)for USER in $TMPdo  useradd $USER  echo "123456" | passwd --stdin $USER &> /dev/nulldone[root@localhost opt]# source users.sh[root@localhost opt]# tail -2 /etc/passwdSimita:x:1030:1030::/home/Simita:/bin/bashBoke:x:1031:1031::/home/Boke:/bin/bash

while语句的结构

重复测试某个条件,只要条件成立则反复执行

while   条件测试操作do命令序列done

while语句的执行流程

while语句应用演示

猜商品价格
1.通过变量RANDOM获得随机数
2.提示用户猜测并记录次数,猜中后退出循环

[root@localhost ~]# vim demo08.sh#!/bin/bashPRICE=$(expr $RANDOM % 1000)TIMES=0        echo "商品价格范围为0-999,猜猜看是多少?"while truedo        read -p "请输入您猜的价格数目:" INT        let TIMES++if [ $INT -eq $PRICE ];then        echo "你猜对了,实际价格是$PRICE"        echo "你总共猜了$TIMES 次"        exit 0elif [ $INT -gt $PRICE ];then        echo "太高了!"else        echo "太低了!"        fidone[root@localhost ~]# source demo08.sh商品价格范围为0-999,猜猜看是多少?请输入您猜的价格数目:500太高了!请输入您猜的价格数目:250太高了!请输入您猜的价格数目:200太高了!请输入您猜的价格数目:150太低了!请输入您猜的价格数目:180太高了!请输入您猜的价格数目:160太低了!请输入您猜的价格数目:170太高了!请输入您猜的价格数目:165太高了!请输入您猜的价格数目:162你猜对了,实际价格是162你总共猜了9 次

until语句结构

重复测试某个条件,只要条件不成立则反复执行

until   条件测试操作do命令序列done

until语句应用演示

为指定用户发送在线消息
1.若用户不在线(为登录系统),则每10分钟试一次,直至用户登录系统后再发送消息
2.用户名与消息通过位置参数传递给脚本

[root@localhost ~]# vim demo01.sh #!/bin/bashusername=$1#判断信息格式if [ $# -lt 1 ];then  echo "Usage:`basename $0`  []"  exit 1fi#判断用户是否存在if grep "^$username:" /etc/passwd > /dev/null ;then :else echo "用户不存在"fi#用户是否在线,若不在线每五秒联系一次until who|grep "$username" > /dev/null;do        echo "用户不在线"        sleep 5donemes=$*echo $mes | write $username[root@localhost ~]# chmod +x demo01.sh[root@localhost ~]# ./demo01.sh czt指定用户登录后,在终端界面接受到信息[czt@localhost ~]$ Message from root@localhost.localdomain on pts/0 at 15:09 ...cztEOF
0