缺少参数的打印错误

时间:2016-04-07 04:02:47

标签: linux unix

我正在尝试编写一个脚本,它将检查第一个和第二个数字的参数数量;如果输入两个变量,它将进行计算;如果缺少一个参数,它将打印错误消息。 这就是我到目前为止所做的:

#!/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

即使我输入了两个号码,我也总是收到错误消息。我错过了什么?请帮忙。

3 个答案:

答案 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是文件的名称,而52是您的参数。

所以,你持续获得"非法数量的论点"是因为在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