正規表現を使用したケース文の数値の一致

正規表現を使用したケース文の数値の一致

シェルスクリプトへの引数が10進表記法で整数(例えば、負ではない整数:0、1、2、3、…、17、…、42、…などですが、3.1416または-5ではない)であることを確認したいと思います。 (したがって、0x11または0x2Aとは異なります)。正規表現を条件としてCaseステートメントを作成する方法(数値一致)?私はいくつかの異なるアプローチを試しました(例:[0-9]+または^[0-9][0-9]*$)。そのどれも機能しません。次の例に示すように、有効な数字はその数字をキャプチャしてワイルドカードと一致するように設計された数値正規表現を介して渡されます  *

i=1
let arg_n=$#+1

while (( $i < $arg_n )); do
    case ${!i} in
    [0-9]+)
        n=${!i}
        ;;
    *)
        echo 'Invalid argument!'
        ;;
    esac
    let i=$i+1
done

出力:

$ ./cmd.sh 64
Invalid argument!

ベストアンサー1

case正規表現を使用する代わりに、次を使用します。模様

「1つ以上の数字」の場合は、次の操作を行います。

shopt -s extglob
...
    case ${!i} in
        +([[:digit:]]) )
            n=${!i}
            ;;
    ...

正規表現を使用するには、=~次の演算子を使用してください。[[...]]

if [[ ${!i} =~ ^[[:digit:]]+$ ]]; then
    n=${!i}
else
    echo "Invalid"
fi

おすすめ記事