我有一个脚本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
即使我无法重现您的问题,原因似乎很清楚:当没有指定足够的参数时,您的班次不会引发错误作为退出值,继续执行脚本,否则会默默地忽略该条件。相反,它会输出自己的错误,并终止进一步的脚本执行。
而不是依靠 shift 来产生退出值 - 你的似乎没有 - 你可以考虑测试命令行是否有任何要转移的参数:
echo "${#@}"
显示剩余(尚未移动)命令行的长度。如果它是 0,你想要你的警告信息。请注意,当 bash 产生命令行参数的数量时,busybox ash 计算命令行中剩余的字符数。
或者。测试 $1 是否为空:
[ -z "$1" ] && echo "no args"