Shell脚本 条件、循环 和分支

流程控制
程序若只能顺序逐句执行,则有些功能会无法完成。故必须有特定的流程控制语句,可
以让使用者控制程序的执行流程。Bash 提供通常三类流程控制语句,分别为:条件、循环
和分支

1:多分支条件
#!/bin/bash
if [ "$1" -eq 1 ]; then
echo "1"
elif [ "$1" -eq 2 -o "$1" -eq 3 ]; then
echo "2 or 3"
elif [ "$1" -ge 4 -a "$1" -lt 7 ]; then
echo "[4, 7)"
else
echo "others"
fi

 

2. 循环
Bash 中支持三种不同类型的循环:for 循环、while 循环和 until 循环,无论何种形式,
循环体中的语句都包含在 do-done 语句之间。

1)list 是一个字符串的列表,由空白字符分隔。list 支持通配符,也可以缺省,如果 list 缺
省,for 循环则自动使用当前的参数列表($@ 变量)来作为 list。
如程序清单所示的代码,根据输入参数,分别循环打印工作日和非工作日。
程序清单 for 循环基本应用示例脚本
#!/bin/bash
if [ "$1" == "weekdays" ]; then
for wd in Monday Tuesday Wednesday Thursday Friday; do
echo $wd
done
elif [ "$1" == "weekend" ]; then
for wd in Saturday Sunday
do
echo $wd
done
else
echo "Wrong input!"
fi

 

C风格 for 循环脚本
#!/bin/bash
for ((i=0; i < 7; i++))
do
echo $i
done

2)while 循环
while 循环是测试一个条件,并反复执行循环体到条件为假时结束,也有 Shell 风格和 C
风格两种形式。

while 循环示例脚本
#!/bin/bash
i=0
while [ "$i" -le "$#" ]
do
eval tmp=\$$i
# 以变量 i 的值为变量名再取值
echo "$tmp"
i=`expr $i + 1`
done
echo
j=0
while ((j++ <= i))
do
eval tmp=\$$j
echo "$tmp"
done

3)until 循环
until 循环与 while 结构类似,但 util 循环的语义是条件为假时反复执行循环体到条件变
为真时结束

until [条件]
do
命令
done
或者
until ((表达式))
do
命令
done

5)break 和 continue
所有的 Shell 循环结构,都可以使用 break 或者 continue 跳出循环,语义与 C 语言中相
同。不同的地方在于,break 或者 continue 都可以带一个数字指示跳出几重循环。缺省为 1。
如下所示的代码结构中的 break 和 continue,可以直接终止或重新执行多重循环。
for ((i=0; i<10; i++)); do
语句 1
for ((j=0; j < 10; j++)); do
for ((k=0; k < 10; k++)); do
if [ condition1 ]; then
continue 2
elif [ condition2 ]; then
break 2
else
break 3
fi
done
done
done

注:(())所支持的 C 风格循环的条件测试,脚本第一行的解释器必须是 bash ,只有较
新版本的 Bash 才支持这种风格。若使用 sh 做解释器,这种风格的循环会出错。

 

3. 分支
Shell 中的分支结构主要就是 case-esac 语句。该结构与 C 语言中的 switch-case 结构非常
类似。

case 结构示例脚本
#!/bin/bash
case "$1" in
"first")
echo "Parameter one is first"
;;
"second")
echo "Parameter one is second"
;;
"third")
echo "Parameter one is third"
;;
*)
echo "The parameter is not first, second or third"
;;
esac

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#君君#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值