shell(6)流程控制
在 Shell 脚本中,流程控制是编写复杂脚本的核心部分,用于控制程序的执行流程。常见的流程控制结构包括条件语句、循环语句和分支语句。
1. 条件语句
条件语句用于根据条件执行不同的代码块。
(1) if
语句
基本语法:
1 | # if |
示例:
1 |
|
[ 条件 ]
是测试条件,常见比较运算符:- 数值:
-eq
(等于)、-ne
(不等于)、-gt
(大于)、-lt
(小于)、-ge
(大于等于)、-le
(小于等于) - 字符串:
=
(等于)、!=
(不等于)、-z
(空字符串)、-n
(非空字符串) - 文件:
-f
(文件存在且是普通文件)、-d
(目录存在)、-e
(文件存在)
- 数值:
(2) case
语句
用于多分支选择,类似其他语言中的 switch
。
基本语法:
1 | case 变量 in |
示例:
1 |
|
2. 循环语句
循环用于重复执行代码块。
(1) for
循环
遍历列表或范围。
基本语法:
1 | for 变量 in 列表; do |
示例:
1 |
|
- 也可以用 C 风格的语法:
1 | for ((i=1; i<=5; i++)); do |
(2) while
循环
当条件为真时持续执行。
基本语法:
1 | while [ 条件 ]; do |
示例:
1 |
|
(3) until
循环
当条件为假时持续执行(与 while
相反)。
基本语法:
1 | until [ 条件 ]; do |
示例:
1 |
|
3. 流程控制关键字
break
:跳出当前循环。continue
:跳过本次循环,继续下一次迭代。
示例:
1 |
|
输出:
数字: 1
数字: 2
数字: 4
4. 条件测试
Shell 中条件测试通常使用 [ ]
或 [[ ]]
(后者更强大,支持正则表达式等)。
- 示例:
1 |
|
注意事项
- 空格:
[ ]
中的条件两侧必须有空格,例如[ $a -eq $b ]
,而不是[$a -eq $b]
。 - 变量引用:建议用
${变量}
或$变量
,避免未定义变量导致的错误。 - 调试:可以用
bash -x 脚本.sh
查看脚本执行过程。