如果满足条件则退出 sh 脚本

如果满足条件则退出 sh 脚本

也许这是一个菜鸟问题,但我对 sh 脚本相当陌生,我必须等待大约两个小时才能确保我的逻辑是正确的,所以我只是想在这里问。

我有一个 sh 脚本,它应该获取特定文件的行数;一旦满足条件,整个 sh 脚本应该退出/停止

if [wc -l "$file_data" -lt 2000]; then
        echo "does not meet minimum requirements"
        exit -1

我不知道我是否应该选择exit 0orexit 1exit -1

答案1

逻辑是正确的,但语法不正确。

if [ "$(wc -l <"$file_data")" -lt 2000 ]; then
    echo 'Error error' >&2
    exit 1
fi
  1. []分别在其前后需要空格。需要空格,因为[它是一个单独的命令,并且]需要是该命令的最后一个参数。

  2. 命令的输出可以通过命令替换 替换为字符串$(...)。在上面的测试中,我们使用命令替换来计算文件中的行数。结果被插入到一个字符串中,我们与数字 2000 进行比较。我们将文件中的数据重定向到wc -l,这意味着我们不必从输出中删除文件名wc

  3. 成功时退出状态应为零,失败时退出状态应为 1 到 127 之间的非零整数。除了非零之外,这些数字除了代码赋予它们的含义之外没有任何内在含义。一些工具使用不同的数字来指定不同的错误条件,请参见curl(称为“退出代码”的部分)和rsync(称为“退出值”的部分)的手册。大多数工具仅用于1发出失败信号。

  4. 诊断消息和错误等应输出到标准错误流。您可以通过重定向来做到这一点>&2。这样做可以将脚本的普通输出与任何诊断消息分开,而不会在输出中混合错误消息。出于同样的原因,交互式提示和问题等也会输出到标准错误流。

  5. 声明if以 结束fi

另请参阅https://www.shellcheck.net/网站提供了一个可以帮助您发现最基本错误的工具。

相关内容