八、流程控制
1、if语句
if condition1 then command1 elif condition2 then command2 else commandN fi
- shell的流程控制执行语句不可为空,所以如果else分支没有语句执行,就不要写这个else
- 如果then写在conditionn之后,需在then前加“;”
# 例1:
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
# 例2:
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi
2、for循环
格式一: for var in item1 item2 ... itemN do command1 command2 ... commandN done
写成一行:
for var in item1 item2 ... itemN; do command1; command2… done;
格式二:
for((assignment;condition:next));do command_1; command_2; commond_..; done;
- 当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。
- 命令可为任何有效的shell命令和语句。
- in列表可以包含替换、字符串和文件名。
- in列表是可选的,如果不用它,for循环使用命令行的位置参数
# 例1
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
# 例2
for str in 'This is a string'
do
echo $str
done
# 例3
#通常情况下 shell 变量调用需要加 $,但是 for 的 (()) 中不需要
for((i=1;i<=5;i++));do
echo "这是第 $i 次调用";
done;
3、while循环
while condition do command done
#!/bin/bash
# 例1:输出1...5
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
# 此处使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
done
# 例2:读取键盘输入信息,输入信息被设置为变量FILM
echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
echo "是的!$FILM 是一个好网站"
done
4、无限循环
语法格式如下:
while : do command done
或者
while true do command done
或者
for (( ; ; ))
5、until循环
- until当条件为true时停止,反之执行
- while为当条件为true时执行,反之停止
until的语法格式
until condition do command done
condition 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。
#!/bin/bash
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
#用until循环实现输出0-9的数字
6、case多路选择语句
- 用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令
- 取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令
- case需要有一个esac(即case反过来)作为结束标记,每个分支用右括号")",两个;;作为break 使用
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
7、跳出循环
- break:跳出循环体
- continue:结束本次循环,执行下一次循环
# 例1:break,continue
#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3) echo "你输入的数字为 $aNum (1-3)!"
;;
4|5) echo "你输入的数字为 $aNum (4-5)!"
continue
;;
*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
break
;;
esac
done