• 本页内容

34. 用 || 组合多个命令


|| 称为 OR 列表结构,用于执行一系列命令中的一个命令。 仅当前一个命令失败(即返回非零状态)时,才会执行 or 列表中的下一个命令。||的行为与&&正好相反。

语法:

command1 || command2 || command3 || ..
  • 如果 command1 执行成功(返回状态0),bash不会执行 command2 或 command3
  • 如果 command1 失败(返回非零状态),则执行 command2。
  • 如果 command2 成功执行,bash 不会执行 command3。
  • 如果 command2 失败,则执行 command3。

以下示例有 5 个命令,以||分隔。 但是,由于 command1 已成功执行,因此该列表中的其余命令将永远不会被执行。

$ ls -ld /etc               \
|| x=10                     \
|| echo "value of x is: $x" \
|| pwd                      \
|| echo "finished"
drwxr-xr-x. 86 root root 4096 Apr 28 06:37 /etc

OR 列表的一个很好的用途是替换简单的if !语句:

if [ ! -f /.datafile ]
then
    touch /.datafile
fi

下面的代码片段与上面的代码片段完全相同。

[ -f /.datafile ] || touch /.datafile

||的另一种用法 就是当必要的操作失败时以适当的状态退出 shell 脚本,如下所示。

touch /tmp/temp.dat || { echo 'Unable to create /tmp/temp.dat file' >&2; exit 1; }