0

-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
4

2 に答える 2

2

(( ... )) is not test.

$ (( -1 < 1 )) ; echo $?
0
$ (( -1 > 1 )) ; echo $?
1
于 2013-06-12T04:14:45.613 に答える
0

[[and]]ではなく((andを使用する必要があり))ます。前者はテストであり、後者は を許可する!=が許可しない式評価-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
于 2013-06-12T04:15:23.823 に答える