我正在尝试编写一个脚本,它将检查第一个和第二个数字的参数数量;如果输入两个变量,它将进行计算;如果缺少一个参数,它将打印错误消息。 这就是我到目前为止所做的:
#!/bin/bash
echo -n "Enter the first number: "
read num1
echo -n "Enter the second number: "
read num2
if [ $# -le 1 ]; then
echo "Illegal number of arguments"
exit
else
echo "The sum is: " $(( num1 + num2 ))
fi
即使我输入了两个号码,我也总是收到错误消息。我错过了什么?请帮忙。
答案 0 :(得分:2)
您的变量 num1 和 num2 不是positional parameters,因此special parameter $#
可能不是您的想法它是。您应该更改条件以检查是否已设置两个变量。例如:
declare -i num1 num2
read -p 'Enter the first number: ' num1
read -p 'Enter the second number: ' num2
if [ -z "$num1" ] || [ -z "$num2" ]; then
echo "Illegal number of arguments" >&2
else
echo "The sum is: $((num1 + num2))"
fi
答案 1 :(得分:1)
看起来你正在弄乱你正在以交互方式阅读的命令行参数和变量。 $#
与您从命令行声明和/或读取的变量无关。它是命令行参数的数量。您需要检查您尝试从控制台读取的变量:
#!/bin/sh
echo -n "Enter the first number: "
read num1
echo -n "Enter the second number: "
read num2
[ -z $num1 ] || [ -z $num2 ] && echo "Illegal number of arguments" && exit 1
echo "The sum is: " $(( num1 + num2 ))
另一方面,如果你真的想检查命令行参数,脚本会更简单:
#!/bin/sh
[ -z $2 ] && echo "Illegal number of arguments" && exit 1
echo "The sum is: " $(( $1 + $2 ))
这里$1
引用第一个参数,$2
引用第二个参数,依此类推。 $0
指的是脚本本身的名称。
答案 2 :(得分:0)
所以,你现在设置程序的方式,它通过read命令输入,但这与传入参数不同。
您可以通过CLI传递参数,例如:
./sum.sh 5 2 # => 7
其中sum.sh
是文件的名称,而5
和2
是您的参数。
所以,你持续获得"非法数量的论点"是因为在bash中$#
变量包含参数的数量,但由于您正在从代码中读取值,$#
将始终小于1,因为没有提供任何参数。 / p>
我认为你正在寻找的是这样的:
#!/bin/bash
if [ $# -le 1 ]; then
echo "Illegal number of arguments"
exit
else
echo "The sum is: " $(( $1 + $2 ))
fi
如果您想了解更多信息,请参阅本文:http://www.bashguru.com/2009/11/how-to-pass-arguments-to-shell-script.html