您的位置:首页 > 运维架构 > Shell

Shell学习08:流程控制

2019-06-30 11:34 1221 查看

shell中的流程控制不能为空

if else

if 语句格式

if condition
then
command1
command2
...
commandN
fi

写成一行的形式,除了最后一个fi,每个语句后面都需要加上 ;进行语句分割,否则会报错

if [ "lop" = "lop" ]; then echo "true"; fi

if else 语句格式

前面说过流程控制不能为空,即如果if条件中else 的值为空,那么else就不要写。因此if 与if else 分开来讲。

if condition
then
command1
command2
...
commandN
else
command
fi

if else-if else 语句格式

if condition1
then
command1
elif condition2
then
command2
else
commandN
fi

for 循环

语句格式

for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done

实例

for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done

# 输出为
The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5

也可以使用以下形式的语句

for ((i=1;i<=5;i++))
do
echo $i
done

# 输出为
1
2
3
4
5

while 循环

用于循环判断/读取信息,直到判断条件为假时退出。语句格式:

while condition
do
command
done

while还可以和read命令连用,用于循环读取信息

echo '按下 <CTRL-D> 退出'
echo -n '输入你的名字: '
while read NAME
do
echo "你好!${NAME}!"
done

这种方法会造成无限死循环,因此需要 CTRL-D 退出

无限循环

除了上面讲的通过while与read连用造成无限循环外,还可以使用下面几种方法进入无限循环

# 1
while :
do
command
done

# 2
while true
do
command
done

# 3
for (( ; ; ))

until 循环

与while 循环在处理方式上正好相反,until 循环执行一系列命令直至条件为 true 时停止。语句格式:condition条件为假则一直执行

until condition
do
command
done

case

多选择语句,可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。语句格式:

case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac

举个栗子

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1)  echo '你选择了 1'
;;
2)  echo '你选择了 2'
;;
3)  echo '你选择了 3'
;;
4)  echo '你选择了 4'
;;
*)  echo '你没有输入 1 到 4 之间的数字'
;;
esac

输入不同的内容,会有不同的结果,例如:

输入 1 到 4 之间的数字:
你输入的数字为:
2
你选择了 2

esac作为case 语句的结束标志,与前面if 语句的fi 异曲同工。并且每个case分支用右圆括号,用两个分号表示break。

跳出循环

break 命令

break命令允许跳出所有循环(终止执行后面的所有循环),直接上例子

#! /bin/bash

while read num
do
echo "你输入的数字为:${num}"
if [ ${num} -eq 2]
then
echo "输入正确!"
break
else
echo "输入错误,请重新输入:"
fi
done
# 执行脚本
sh test.sh
3

# 输出为
你输入的数字为:3
输入错误,请重新输入:

# 执行脚本
sh test.sh
2

# 输出为
你输入的数字为:2
输入正确!

continue 命令

与break类似,但是不会跳出所有循环,仅仅跳出当前循环。

#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字: "
read Num
case $Num in
1|2|3|4|5) echo "你输入的数字为 $Num!"
;;
*) echo "你输入的数字不是 1 到 5 之间的!"
continue
echo "游戏结束"
;;
esac
done

运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句 echo “游戏结束” 永远不会被执行。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: