3 回答
TA贡献1830条经验 获得超9个赞
就像任何其他简单命令一样,[ ... ]或者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.hwith中定义的#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
TA贡献1719条经验 获得超6个赞
如果要处理数字,最好使用算术表达式。
if (( $# != 1 )); then
echo "Illegal number of parameters"
fi
TA贡献1757条经验 获得超7个赞
在[]上:!=,=,== ...是字符串比较运算符,-eq,-gt ...是算术二进制运算符。
我会用:
if [ "$#" != "1" ]; then
要么:
if [ $# -eq 1 ]; then
- 3 回答
- 0 关注
- 829 浏览
添加回答
举报