千家信息网

Shell编程——case语句与循环语句(3)

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,case多分支语句case语句的结构针对变量的不同取值,分别执行不同的命令序列实例1 击键类型识别 提示用户输入一个字符 判断出该字符是字母,数字或者其他字符#!/bin/bashread -
千家信息网最后更新 2025年12月01日Shell编程——case语句与循环语句(3)

case多分支语句

case语句的结构针对变量的不同取值,分别执行不同的命令序列

实例1

 击键类型识别   提示用户输入一个字符   判断出该字符是字母,数字或者其他字符
#!/bin/bashread -p "请输入一个字符:" keycase $key in[a-z] | [A-Z])    echo "你输入的是字母"     ;;[0-9])    echo "你输入的是数字"    ;;*)    echo "你输入的是特殊字符"esac

实例2

输入成绩,查看成绩等级

#!/bin/bashread -p "请输入你的成绩:" numcase $num in[8-9][0-9]|100)    echo "优秀"    ;;7[0-9])    echo "良好"    ;;6[0-9])    echo "合格"    ;;[0-9]|[1-5][0-9])    echo "不合格"    ;;*)    echo "您输入有误"esac

for语句的结构

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

实例1

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

#!/bin/bashTMP=$(cat /root/name.txt)for USER in $TMPdo        echo "用户是$USER"        useradd $USER         echo "123456" | passwd --stdin $USER > /dev/nulldone

实例2

 根据IP地质检查主机状态 IP地质存放在demo04.txt文件中,每行一个 使用ping命令检测各主机的连通性

#!/bin/bashIP=$(cat /root/demo04.txt)for ip in $IPdo  ping -c 1  -s 1 -w 3 $ip > /dev/null if [ $? -eq 0 ] then   echo "$ip主机存在" else   echo "$ip主机不存在" fidone

while语句的结构

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

实例1

 批量添加用户 用户名称以stu开头,按数字顺序进行编号 一共添加5个用户,即stu1,stu2,stu3... 初始密码均设为123456
#!/bin/bashnum=1while [ $num -le 5 ]douseradd stu$num  echo "123456" | passwd --stdin stu$num &> /dev/null  let num++done

实例2

 猜商品价格脚本 通过变量RANDOM获得随机数 提示用户猜测并记录次数,猜中后退出循环
#!/bin/bashrandom=$(expr $RANDOM % 100)tim=0while truedo read -p "请输入商品的价格:" jia let tim++ if [ $jia -eq $random ] then  echo "恭喜您猜对了"  echo "您一共猜了$tim" exit 0 elif [ $jia -lt $random ] then  echo "您猜的数小了" else  echo "您猜的数大了" fidone

综合实例

进入五家商店分别购买商品,最后查看消费总额
#!/bin/bashi=1sum=0while [ $i -le 5 ]do  echo "进入第$i家商店"  read -p "是否进入看看(yes/no)" doing  while [ $doing = "yes" ]    do       echo "1:衣服¥200"       echo "2:鞋子¥100"       echo "3:手套¥75"       echo "4:裤子¥150"       read -p "请选择需要购买的商品序列:" num       case $num in           1)             echo "衣服购买成功"             expr $[sum+=200] &> /dev/null           ;;           2)             echo "鞋子购买成功"             expr $[sum+=100] &> /dev/null           ;;           3)             echo "手套购买成功"             expr $[sum+=75] &> /dev/null           ;;           *)             echo "裤子购买成功"             expr $[sum+=150 &> /dev/null      esac      read -p "是否继续进行购买(yes/no)" doing   done   let i++   if [ $doing = "no" ]     then     continue   fidone   echo "购物总价:$sum"

until语句的结构

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

实例1

 计算1-50的和值 通过循环累计的方式计算1-50的和值
#!/bin/bashsum=0i=0until [ $i -eq 51 ]do  let sum+=$i  let i++doneecho "总数之和为:$sum"

实例2

 为指定用户发送在线消息 若用户不在线(未登陆系统),则每5s试一次,直至用户登录后在发送消息 用户与消息通过为止参数传递给脚本
#!/bin/bashif [ $# -lt 0 ]then  echo "Usage:$0 "  exit 1figrep "$1" /etc/passwd &> /dev/nullif [ $? -eq 0 ];then :else  echo "用户不存在"fiuntil who|grep "$1" > /dev/nulldo echo "用户不在线" sleep 5doneecho $2 | write $1


谢谢阅读!!!

0