为什么灰移命令导致整个脚本退出?

时间:2014-07-20 10:32:42

标签: sh ash

我有一个脚本test.sh

OUTPUT_FILE="$1"; shift || { echo "require arg1: output file path"; exit 1; }

但是当我执行./test.sh而没有参数时,它不会输出require arg1: output file path输出为shift: nothing to shift

谁能告诉我为什么?

我的灰环境:Busybox Android 2.2~4.4

1 个答案:

答案 0 :(得分:1)

即使我无法重现你的问题,但原因似乎很明显: 如果没有指定足够的参数,您的班次不会将错误提升为退出值,继续执行脚本,但是否则会无声地忽略该条件。相反,它会输出自己的错误,并终止进一步的脚本执行。

而不是依靠shift来产生退出值 - 你的似乎并不是这样 - 你可以考虑测试任何剩下的参数的命令行:

echo "${#@}"

显示剩余(尚未移位)命令行的长度。如果它为0,则需要您的警告消息。请注意,虽然bash生成命令行参数的数量,但busybox ash会计算命令行中剩余的字符数。

可替换地。为空虚测试$ 1:

[ -z "$1" ] && echo "no args"