对于小于1的传递参数错误,我在做什么?

时间:2013-06-12 04:12:00

标签: linux bash shell scripting

当输入类似-9的数字时,我正在尝试使用脚本来回显消息。

必须从命令行传递参数

这就是我现在所拥有的。

#!/bin/bash
#Assign1part1

if (( $# != 1 )); then
    echo "Error: Must only enter one argument" >&2
    exit 1
fi

if (( $1 -lt 1 )); then
    echo "Error: Argument must be a positive integer" >&2
    exit 1
fi

seq -s, $1 -1 1

2 个答案:

答案 0 :(得分:2)

(( ... ))不是test

$ (( -1 < 1 )) ; echo $?
0
$ (( -1 > 1 )) ; echo $?
1

答案 1 :(得分:0)

您需要使用[[]],而不是(())。前者正在测试,后者是表达式评估,允许!=而不是-lt

最重要的是,你的第一条错误消息略微偏离,这听起来就像你输入的参数多于你应该拥有的参数,即使在你没有输入的情况下也是如此。它会更好地表达为"Must enter exactly one argument"

而且,由于$#是数字,因此在这种特殊情况下,我更倾向于使用数字比较-ne而不是!=

换句话说:

#!/bin/bash
#Assign1part1

if [[ $# -ne 1 ]]; then
    echo "Error: Must enter exactly one argument" >&2
    exit 1
fi

if [[ $1 -lt 1 ]]; then
    echo "Error: Argument must be a positive integer" >&2
    exit 1
fi

seq -s, $1 -1 1

使用某些测试数据运行它会产生:

pax> testprog 5
5,4,3,2,1

pax> testprog 9
9,8,7,6,5,4,3,2,1

pax> testprog
Error: Must enter exactly one argument

pax> testprog 1 2
Error: Must enter exactly one argument

pax> testprog -7
Error: Argument must be a positive integer