12.1.3. Shell 条件语句

每个命令都会返回 退出状态,这可以被条件语句使用。

  • 成功:0 (“True”)

  • 失败:非0 (“False”)

[注意]注意

“0” 在 shell 条件语句中的意思是 “True”,然而 “0” 在 C 条件语句中的含义为 “False”。

[注意]注意

[“ 跟 test 命令是等价的,它评估到 “]“ 之间的参数来作为一个条件表达式.

如下所示是需要记忆的基础 条件语法

  • <command> && <if_success_run_this_command_too> || true

  • <command> || <if_not_success_run_this_command_too> || true

  • 如下所示是多行脚本片段

  1. if [ <conditional_expression> ]; then
  2. <if_success_run_this_command>
  3. else
  4. <if_not_success_run_this_command>
  5. fi

这里末尾的“|| true”是需要的,它可以保证这个 shell 脚本在不小心使用了“-e”选项而被调用时不会在该行意外地退出。

表 12.6. 在条件表达式中进行文件比较

表达式返回逻辑真所需的条件
-e <file><file> 存在
-d <file><file> 存在并且是一个目录
-f <file><file> 存在并且是一个普通文件
-w <file><file> 存在并且可写
-x <file><file> 存在并且可执行
<file1> -nt <file2><file1> 是否比 <file2> 新
<file1> -ot <file2><file1> 是否比 <file2> 旧
<file1> -ef <file2><file1> 和 <file2> 位于相同的设备上并且有相同的 inode 编号

表 12.7. 在条件表达式中进行字符串比较

表达式返回逻辑真所需的条件
-z <str><str> 的长度为零
-n <str><str> 的长度不为零
<str1> = <str2><str1> 和 <str2> 相等
<str1> != <str2><str1> 和 <str2> 不相等
<str1> < <str2><str1> 排列在 <str2> 之前(取决于语言环境)
<str1> > <str2><str1> 排列在 <str2> 之后(取决于语言环境)

算术整数的比较在条件表达式中为 “-eq“,”-ne“,”-lt“,”-le“,”-gt“ 和 “-ge“。