6. Shell 流程控制
1. 条件选择流程
1.1 if
#!/bin/bash
# if 格式
#if condition
#then
# command1
# command2
# ...
# commandN
#fi
# 如果写出一行一般格式如下:
# if [ condition ]; then command1; fi
num1=10
num2=20
if [ $num1 -lt $num2 ]
then
echo 'true'
fi
if [ $num1 -lt $num2 ] ; then echo 'true'; fi
if test $num1 -lt $num2 ; then echo 'true'; fi
1.2 if else
#!/bin/bash
# if else 格式
#if condition
#then
# command1
# ...
#else
# command1
# ...
#fi
num1=10
num2=20
if [ $num1 -gt $num2 ]
then
echo 'true'
else
echo 'false'
fi
1.3 if else-if else
#!/bin/bash
# if else-if else 格式
#if condition
#then
# command1
# ...
#elif condition
# command1
# ...
#then
# command1
# ...
#else
# command1
# ...
#fi
num1=10
num2=20
if [ $num1 -eq $num2 ]
then
echo '=='
elif [ $num1 -gt $num2 ]
then
echo 'true'
else
echo 'false'
fi
2. 循环控制
2.1 for
#!/bin/bash
#格式
#for var in item1 item2 ... itemN
#do
# command1
# command2
# ...
# commandN
#done
#
#for var in item1 item2 ... itemN; do command1; command2… done;
loop_val=(1 2 3 4 5)
for val in ${loop_val[@]}
do
echo $val
done
for val in ${loop_val[@]} ; do echo $val; done
for str in 'This is a string'
do
echo $str
done
2.2 while
#!/bin/bash
#while condition
#do
# command
#done
index=1
while [ $index -le 5 ]
do
echo $index
let "index++"
done
2.3 until 循环
#!/bin/bash
#until condition
#do
# command
#done
index=1
until [ $index -gt 5 ]
do
echo $index
let "index++"
done
2.4 case
esac(就是case反过来)作为case语句的结束标记,每个case分支用右圆括号,用两个分号表示break。
#!/bin/bash
#case 值 in
#模式1)
# command1
# ...
# ;;
#模式2)
# command1
# ...
# ;;
#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
3. 跳出循环
3.1 break命令
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
break
;;
esac
done
3.2 continue命令
while :
do
echo -n "输入 1 到 5 之间的数字: "
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的!"
continue
echo "游戏结束"
;;
esac
done