就像任何其他简单命令一样,[ ... ]
或者test
其参数之间需要空格。
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
要么
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
意见建议
在Bash中时,最好使用[[ ]]
代替,因为它不会对单词的变量进行单词拆分和路径名扩展,除非引用是表达式的一部分,否则可能不需要引用。
[[ $# -ne 1 ]]
它还具有其他一些功能,例如不带引号的条件分组,模式匹配(扩展模式匹配 extglob
)和正则表达式匹配。
以下示例检查参数是否有效。它允许一个或两个参数。
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
对于纯算术表达式,使用(( ))
一些仍可能会更好,但它们仍然可能在[[ ]]
与它的算术运算符喜欢-eq
,-ne
,-lt
,-le
,-gt
,或-ge
通过将表达为一个字符串参数:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
如果您还需要将其与其他功能结合使用,那将很有帮助[[ ]]
。
退出脚本
当传递无效参数时使脚本退出也是合乎逻辑的。这已经提出的意见通过ekangas但有人编辑这个答案与把它-1
作为返回值,所以我还不如做是正确的。
-1
尽管没有被Bash接受为Bash的参数,但exit
没有明确记录,也没有权利用作常见建议。 64
也是最正式的值,因为它是在sysexits.h
with中定义的#define EX_USAGE 64 /* command line usage error */
。大多数类似的工具ls
也会返回2
无效的参数。我也曾经返回2
过自己的脚本,但是最近我不再真正在意它,只使用1
了所有错误。但让我们放在2
这里,因为它是最常见的,并且可能不是特定于操作系统的。
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
参考文献
test
。这是标准Unix命令的名称,您不想对其进行阴影处理。