shell 流程控制

/

–if
if 语法格式:

  1. if condition
  2. then
  3. command1
  4. command2
  5. ...
  6. commandN
  7. fi

if else 语法格式:

  1. if condition
  2. then
  3. command1
  4. command2
  5. ...
  6. commandN
  7. else
  8. command
  9. fi

if elif else 语法格式:

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

实例:

  1. a=10
  2. b=20
  3. if [ $a -lt $b ]
  4. then
  5. echo "a小于b"
  6. else
  7. echo "a大于b"
  8. fi

then 可以和 if 放到一行,需要加分号:

  1. a=10
  2. b=20
  3. if [ $a -lt $b ]; then
  4. echo "a小于b"
  5. else
  6. echo "a大于b"
  7. fi

结果:
a小于b

–for
for 循环语法格式:

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

实例1:

  1. for i in 1 2 3 4 5 6
  2. do
  3. echo $i
  4. done

打印从1到6,结果:
1
2
3
4
5
6

实例2:

  1. for i in $(seq 6)
  2. do
  3. echo $i
  4. done

打印从1到6,结果:
1
2
3
4
5
6

实例3:

  1. for i in $(seq 3 6)
  2. do
  3. echo $i
  4. done

打印从3到6,结果:
3
4
5
6

实例4:

  1. for i in $(seq 1 2 6)
  2. do
  3. echo $i
  4. done

打印从1到6,步长为2的值,结果:
1
3
5

实例5:

  1. array=(A B C)
  2. for i in ${array[@]}
  3. do
  4. echo $i
  5. done

打印数组array的值,结果:
A
B
C

实例6:

  1. for i in `ls /etc`
  2. do
  3. echo $i
  4. done

打印/etc目录下的内容

–while
while 循环,用于不断执行一系列命令,也用于从输入文件中读取数据。其语法格式为:

  1. while condition
  2. do
  3. command
  4. done

条件为真,执行后面语句。

实例1:

  1. i=1
  2. while [ $i -le 3 ]
  3. do
  4. echo $i
  5. i=`expr $i + 1`
  6. done

打印1到3的值,结果:
1
2
3

实例2:

  1. cat a.txt | while read line
  2. do
  3. echo $line
  4. done

打印a.txt的每行内容

无限循环:

  1. while true
  2. do
  3. command
  4. done

until 循环,语法格式:

  1. until condition
  2. do
  3. command
  4. done

条件为假,执行后面语句。
until 循环与 while 循环在处理方式上刚好相反。
一般 while 循环优于 until 循环,但在某些时候,也只是极少数情况下,until 循环更加有用。

实例:

  1. i=1
  2. until [ $i -ge 3 ]
  3. do
  4. echo $i
  5. i=`expr $i + 1`
  6. done

打印1到2的值,结果:
1
2

–case
case … esac 为多选择语句,是一种多分支选择结构,
每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。
可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

case … esac 语法格式如下:

  1. case in
  2. 模式1)
  3. command1
  4. command2
  5. ...
  6. commandN
  7. ;;
  8. 模式2)
  9. command1
  10. command2
  11. ...
  12. commandN
  13. ;;
  14. esac

实例1:

  1. echo '输入 1 到 3 之间的数字:'
  2. echo '你输入的数字为:'
  3. read aNum
  4. case $aNum in
  5. 1) echo '你选择了 1'
  6. ;;
  7. 2) echo '你选择了 2'
  8. ;;
  9. 3) echo '你选择了 3'
  10. ;;
  11. *) echo '你没有输入 1 到 3 之间的数字'
  12. ;;
  13. esac

实例2:

  1. script="shell"
  2. case "$script" in
  3. "java") echo "java script"
  4. ;;
  5. "python") echo "python script"
  6. ;;
  7. "shell") echo "shell script"
  8. ;;
  9. *) echo other script"
  10. esac

跳出循环
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break 和 continue。

break 命令
break 命令允许跳出所有循环(终止执行后面的所有循环)。

实例:

  1. for i in $(seq 6)
  2. do
  3. if [ $i -eq 4 ]; then
  4. break
  5. fi
  6. echo $i
  7. done

结果:
1
2
3

continue 命令
continue 命令与 break 命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

实例:

  1. for i in $(seq 6)
  2. do
  3. if [ $i -eq 4 ]; then
  4. continue
  5. fi
  6. echo $i
  7. done

结果:
1
2
3
5
6

转载请注明作者和出处,并添加本页链接。
原文链接: //jiaoqiang.top/post/40