在任何编程语言中,都需要流程控制来改变程序的运行顺序。在shell脚本中,流程控制包括条件语句(if),循环语句(for,while),选择语句(case),下面将通过例子介绍一下各个语句的使用方法。
一、if语句
格式:if list; then list; [ elif list; then list; ] ... [ else list; ] fi
1、单分支
if 条件表达式; then
命令
fi
例子:
#!/bin/bash
N=10
if [ $N -gt 5 ]; then
echo yes
fi
# bash test.sh
yes
2、双分支
if 条件表达式; then
命令
else
命令
fi
例子:
#!/bin/bash
N=10
if [ $N -lt 5 ]; then
echo yes
else
echo no
fi
# bash test.sh
no
3、多分支
if 条件表达式; then
命令
elif 条件表达式; then
命令
else
命令
fi
例子:
#!/bin/bash
N=$1
if [ $N -eq 3 ]; then
echo "eq 3"
elif [ $N -eq 5 ]; then
echo "eq 5"
elif [ $N -eq 8 ]; then
echo "eq 8"
else
echo "no"
fi
其中$1表示接受用户输入参数
二、for语句
格式:for name [ [ in [ word ... ] ] ; ] do list ; done
for 变量名 in 取值列表; do 命令 done
或者
for 变量名 in 取值列表
do
命令
done
例子:
for i in {1..3}; do
echo $i
done
# bash test.sh
1
2
3
三、while语句
条件为真就进入死循环;条件为假就退出循环
格式:while list; do list; done
例子:
#!/bin/bash
N=0
while [ $N -lt 5 ]; do
let N++
echo $N
done
# bash test.sh
1
2
3
4
5
while语句可以用来编写在后台一直执行的脚本,直接将条件设置为while true
四、break和continue的用法
break 是终止循环。
continue 是跳出当前循环
例子1、在死循环中,满足条件则终止循环
#!/bin/bash
N=0
while true; do
let N++
if [ $N -eq 5 ]; then
break
fi
echo $N
done
# bash test.sh
1
2
3
4
例子2、满足条件跳出本次循环
#!/bin/bash
N=0
while [ $N -lt 5 ]; do
let N++
if [ $N -eq 3 ]; then
continue
fi
echo $N
done
# bash test.sh
1
2
4
五、case语句
case 语句一般用于选择性来执行对应部分块命令。
case 模式名 in
模式 1)
命令
;;
模式 2)
命令
;;
*)
不符合以上模式执行的命令
esac
例子:
#!/bin/bash
case $1 in
start)
echo "start."
;;
stop)
echo "stop."
;;
restart)
echo "restart."
;;
*)
echo "Usage: $0 {start|stop|restart}"
esac
# bash test.sh
Usage: test.sh {start|stop|restart}
# bash test.sh start
start.
# bash test.sh stop
stop.
# bash test.sh restart
restart.