也许这是一个菜鸟问题,但我对 sh 脚本相当陌生,我必须等待大约两个小时才能确保我的逻辑是正确的,所以我只是想在这里问。
我有一个 sh 脚本,它应该获取特定文件的行数;一旦满足条件,整个 sh 脚本应该退出/停止
if [wc -l "$file_data" -lt 2000]; then
echo "does not meet minimum requirements"
exit -1
我不知道我是否应该选择exit 0
orexit 1
或exit -1
?
答案1
逻辑是正确的,但语法不正确。
if [ "$(wc -l <"$file_data")" -lt 2000 ]; then
echo 'Error error' >&2
exit 1
fi
[
和]
分别在其前后需要空格。需要空格,因为[
它是一个单独的命令,并且]
需要是该命令的最后一个参数。命令的输出可以通过命令替换 替换为字符串
$(...)
。在上面的测试中,我们使用命令替换来计算文件中的行数。结果被插入到一个字符串中,我们与数字 2000 进行比较。我们将文件中的数据重定向到wc -l
,这意味着我们不必从输出中删除文件名wc
。成功时退出状态应为零,失败时退出状态应为 1 到 127 之间的非零整数。除了非零之外,这些数字除了代码赋予它们的含义之外没有任何内在含义。一些工具使用不同的数字来指定不同的错误条件,请参见
curl
(称为“退出代码”的部分)和rsync
(称为“退出值”的部分)的手册。大多数工具仅用于1
发出失败信号。诊断消息和错误等应输出到标准错误流。您可以通过重定向来做到这一点
>&2
。这样做可以将脚本的普通输出与任何诊断消息分开,而不会在输出中混合错误消息。出于同样的原因,交互式提示和问题等也会输出到标准错误流。声明
if
以 结束fi
。
另请参阅https://www.shellcheck.net/网站提供了一个可以帮助您发现最基本错误的工具。