4.7 流程控制

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 参数左移