shell编程之case语句与for循环语句详细

shell编程之case语句与for循环语句

case分支语句
case语句可以使脚本程序的结构更加清晰,层次分明。

case语句的结构:
适用情况:某个变量存在多种取值,对每种取值执行不同的命令序列。与if相识,不过if是判断不同的条件,而case是判断一个变量的不同取值。

case语句格式:
case 变量值 in
模式1)
	命令序列1
;;
模式2)
	命令序列2
;;
....
*)
	默认命令序列
esac

case执行流程
首相使用“变量值”与模式1进行比较,若取值相同则执行模式1后面的命令序列,遇到“;;”后跳转esac,表示结束分支;若与模式1不匹配,则继续执行模式2进行比较,若取值相同则执行模式2后的命令序列,依次类推;若找不到任何匹配的值,则执行默认模式*)后的命令序列

case分支语句使用注意项:
case行尾必须为单词“in”,每一模式必须以右括号“)”结束
双分号“;;”表示命令序列的结束
模式字符串中,使用方括号“[ ]”表示连续范围,还以使用“|”表或
最后的“)”表示默认模式,“”表示通配符

**实例:检查用户输入的字符类型的 shell脚本**
[root@localhost ~]# vim susu.sh 
#!/bin/bash
read -p "请输入一个字符,并回车键确认:" LLL
case "$LLL" in
[a-z]|[A-Z])
        echo "你输入的是字母$LLL!"
        ;;
[1-9])
        echo "你输入的是数字$LLL!"
        ;;
*)
        echo "请输入字母或数字"
        ;;
esac

for循环语句
适用于列表对象无规律,且来源已固定(如某个列表文件)

for语句的结构:
需要指定一个变量及可能的取值列表,不同的取值执行相同的命令序列,直到变量值用完才退出循环。

for语句格式:
for 变量名 in 取值列表
do
	命令序列
done

for语句的执行流程:
首相将取值列表第1个值赋予给变量,并执行do···done循环体中的命令序列;然后再将第2个值赋予给变量,并执行循环体中的命令序列;以此类推直到取值列表取值用完退出for循环

实例:根据IP地址列出主机状态
[root@localhost ~]# vim dats.sh
#!/bin/bash
HIHI=$(cat /root/dats.txt)  //创建并指定变量名
for IP in $HIHI				//指定变量名和取值列表
do
        ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ]				//执行是否成立
Then							//成立执行的命令序列
        echo "up"
Else							//执行不成立
        echo "down"			//不成立执行的命令序列
fi
done

If ,for以及其他shell脚本语句,都可以嵌套使用
while循环语句
适用于控制循环次数,操作对象按数字编号,按特定条件执行重复操作等。

while语句的结构:
根据特定的条件反复执行一个命令序列,直到该条件不再满足为止。应避免死循环,否则后面的命令操作无法执行

while循环语句格式:
while 条件测试操作
do
命令序列
done

While语句的执行流程:
首先判断while后的条件测试结果,如果条件成立,则执行do···循环体中的命令序列,然后返会while再次判断条件测试结果,直到不成立才结束循环。while语句中有两个特殊的条件特使操作:true(真)和false(假)。表示条件成立或不成立,同样也可以使用到if语句中

实例:猜价格游戏
[root@localhost ~]# vim bb.sh 
#!/bin/bash 
POPO=$(expr $RANDOM / 100)     //一种特殊的算法
OPOP=0							   //对应let使用
echo "猜猜我心中的数字是多少0~999!"
while true							//true表示真,成立do
        read -p "我心中的数字是多少呢?" NIMA
        let OPOP++				//每循环+1
        if [ $NIMA -eq $POPO ] ; then
                echo "恭喜你答对了!我心中的数字是$NIMA"
                echo "你总共猜了$OPOP次"
                exit 0			//成立则退出
           elif [ $NIMA -gt $POPO ] ; then
                echo "太高了"
           else
                echo "太低了"
        fi
done
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值