ifの2つの条件(正数のみ可能、文字不可)

ifの2つの条件(正数のみ可能、文字不可)

文字/単語ではなく正数のみを許可するスクリプトを作成する必要があります。

私は2つのif条件を作成しましたが、一緒に動作しません。 1つを削除すると、もう1つはうまく機能します。どのように接続しますか?

    if [[ ${@:2} -lt 0 ]]; then
        shift
        echo "error, only positive"
        exit 3
    fi

    if [[ ${@:2} == [a-zA-Z] ]]; then
        echo "error, no letters allowed"
        exit 4
    fi

私のスクリプトは次の行で実行されます。 ./script.sh file.txt arg1 arg2 arg3 ... したがって、arg1、arg2は-1またはaにはできません。

ベストアンサー1

おそらくすべてのパラメータを繰り返し、それぞれをテストする必要があります。両方をテストできる場合は、次のようにできます。これにより、すべてのパラメータに数字のみがあることを確認できます(したがって、または-文字はありませんが文字はありません。小数点以下)

pattern='[^0-9]'
for arg; do
    if [[ $arg =~ $pattern ]]; then
        printf 'Unacceptable option: %s\n' "$arg"
        exit 3
    fi
done

別々のテストに異なるエラーメッセージと終了コードが含まれるようにするには、forループとテストでこれを実行できますarg。これにより、各コマンドラインオプションが順番に表示されます。

おすすめ記事