Shell 流程控制

if else

if else-if else 语法格式:

1
2
3
4
5
6
7
8
9
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi

注意:sh的流程控制不可为空。如果else分支没有语句执行,就不要写这个else。

写成一行(适用于终端命令提示符):

1
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

甚至可以忽略 if 等结构,更加简写:

1
2
3
4
5
6
#!/bin/bash
a=1
b=1
[ $a == $b ] && echo "$a equals $b"

以下实例判断两个变量是否相等:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi

for 循环

for循环一般格式为:

1
2
3
4
5
6
7
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done

写成一行:

1
for var in item1 item2 ... itemN; do command1; command2… done;

例如,顺序输出当前列表中的数字:

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

遍历数组:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
files_list=(
a.txt
b.txt
)
for file in "${files_list[@]}"
do
echo $file
done

使用 C 语言风格的循环:

1
2
3
4
5
#!/bin/bash
for (( i = 0; i < 3; i++ )) {
echo $i
}

while 语句

1
2
3
4
while condition
do
command
done

以下是一个基本的while循环:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
index=1
while (($index<=3)); do
echo $index
let "index++"
done
index=1
while [ $index -le 3 ]; do
echo $index
index=$(($index+1))
done

无限循环

1
2
3
4
while true
do
command
done

case

下面的脚本提示输入1到4,与每一种模式进行匹配:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

跳出循环

break命令

break 跳出循环;如果是多重循环,仅跳出 break 所在的循环。

continue

continue 仅跳出当次循环。