Linux Shell Scritping - 检查参数

时间:2016-04-17 10:49:59

标签: linux shell

尝试创建一个程序,从命令行获取两个参数并将它们一起添加。但是,如果没有传递两个参数,则需要请求两个参数。

if [$# = 2]; then
ans=$(($1 + $2))
echo "$1 + $2 = $ans"
else
echo "Pass me two Arguments!"
fi

检查参数数量是否等于数字的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

你得到了它,但只是忘记了一些逃避的引号和测试之前/之后的空格([$# = 2])。修正:

if [ "$#" = 2 ]; then
ans=$(($1 + $2))
echo "$1 + $2 = $ans"
else
echo "Pass me two Arguments!"
fi

看似奇怪,[实际上是可执行文件的名称,就像echols一样,你有什么:

$ which [
/usr/bin/[

这意味着,如果您在[之后没有空格,则表示您正在尝试启动名为[your_statement的程序。需要空间来将可执行文件与其参数分开。

大多数* nix系统允许您使用等效的test可执行文件而不是[来获得更直观的语法:if test "$#" = 2; then ...

通过省略if语句中的引号,bash / shell会将#之后的所有内容解释为注释,因此SO的代码格式设置工具(if [$之后的所有内容)在你的代码中是灰色的,但在我的代码中却没有,因为我在"$#"中添加了双引号。

顺便说一下。 ShellCheck非常有用。