4.7 流程控制 #
4.7.1 if #
if-then #
if [ 测试条件成立 ] 或 命令返回值是否为0
then 执行相应命令
fi 结束


if-then-else #
if [ 测试条件成立 ]
then 执行相应命令
else 测试条件不成立,执行相应命令
fi 结束

if-elif-else #
if [ 测试条件成立 ]
elif [ 测试条件成立 ]
then 执行相应命令
else 测试条件不成立,执行相应命令
fi 结束

嵌套 if #
if [ 测试条件成立 ]; then
执行相应命令
if [ 测试条件成立 ]; then
执行相应命令
fi
fi

4.7.2 case 分支 #
case "$变量" in
"情况1" )
命令…;;
"情况2" )
命令…;;
*)
命令…;;
esac

4.7.3 循环 #
for 循环 #
for 参数 in 列表
do 执行的命令
done 封闭一个循环
- 列表中包含多个变量,变量用空格分隔
- 对文本处理,要使用文本查看命令取出文本内容。默认逐行处理,如果文本出现空格会当做多行处理


使用反引号或 $() 方式执行命令,命令的结果当作列表进行处理。
还有一种 C 语言分隔的 for 循环:
for((变量初始化;循环判断条件;变量变化))
do
循环执行的命令
done

while 循环 #
while test测试是否成立; do
命令
done

:
空指令和 true 都可以让 while 变成死循环:

until 循环 #
until 循环与 while 循环相反,循环测试为假时,执行循环,为真时循环停止。

break, continue #


循环处理命令行参数 #
- 命令行参数可以使用 $1 $2 .. ${10} $n 进行读取
- $0 代表脚本名称
- $* 和 $@ 代表所有位置参数
- $# 代表位置参数的数量
#!/bin/bash
for pos in $*; do
if [ "$pos" == "help" ]; then
echo $pos $pos
fi
done
while 形式:
#!/bin/bash
while [ $# -ge 1 ]; do
if [ "$1" = "help" ]; then
echo $1 $1
fi
shift
done
shift 参数左移