这些命令是什么意思?

这些命令是什么意思?

这些命令的更直接可读的方式是什么?

为什么exit 255又不呢exit 1

[ $# -eq 3 ] || { echo error ; exit 255 ; }

grep -q "string" && exit 0

答案1

其他人已经提到这$#是命令行参数的数量,所以我将忽略你问题的这一部分。

给定cmd1 && cmd2,shell首先执行cmd1。如果cmd1失败,则整个表达式失败。如果cmd1成功,shell 将继续执行cmd2。整个表达式成功,如果两个都 cmd1cmd2成功。因此,该&&运算符是应用于 shell 命令的短路布尔 AND。该运算符的使用可以替换为

if cmd1
then
    cmd2
fi

给定cmd1 || cmd2,shell首先执行cmd1。如果成功,则整个表达式成功。否则,shell 将执行cmd2,并且表达式的成功或失败由 确定cmd2。简而言之,这是应用于 shell 命令的短路布尔 OR。您可以将此表格替换为

if ! cmd1
then
    cmd2
fi

我仔细地使用了这些短语成功了/成功失败的/失败多于。对于 shell 命令来说,成功定义为进程退出状态为零。失败是任何非零状态。然而,至少对我来说,尝试从退出状态来理解&&and运算符是令人困惑的,因为你最终会得到一种奇怪的颠倒逻辑。||

答案2

实际上,这非常简单。

该脚本检查它是否恰好获得 3 个参数,即这[ $# -eq 3 ]部分。如果没有,则该{ echo error ; exit 255 ; }部分将被执行。退出代码255有特殊含义,它的意思是“退出状态超出范围”这里。我认为这里有点误用,但有可能。

答案3

$#是个参数数量到外壳。所以,第一行说“如果没有 3 个参数则退出”,因为右边的部分(在||) 仅当左侧部分不为 true 时才执行。||是符合逻辑的或者

255作为返回码可以是任意的。

脚本将返回0,如果输入中包含单词“string”。

这有帮助吗?

答案4

如果输入中包含“string”,则带有命令的行grep执行此操作exit 0,否则退出代码将为 1。更明确的方法是:

grep -q "string"
if [ $? -eq 0 ]
then
  exit 0
else
  exit 1
fi

相关内容