変更する方法[[! $number =~ ^[0-9]+$ ]]をBASHの単語オプションに置き換えますか?

変更する方法[[! $number =~ ^[0-9]+$ ]]をBASHの単語オプションに置き換えますか?

一部のソフトウェアを実行するために必要なファイルを作成するスクリプトに入力がありますが、ソフトウェアはLOとLDOの2つの可能なオプションのうちの1つのみを受け入れます。

私が書いた入力は下のコードの上にあり、下のコードは私が行うように提案されています。

「Overlap(LO or LDO):」という質問をしたいのですが、いずれかのオプションが入力されていない場合はエラーメッセージが表示され、スクリプト全体をやり直すのではなく、手順を繰り返します。 0と0の値9

私が知っている限り、LOとLDOを含めるには^ [0-9]を変更する必要がありますが、句読点が何であるか、どうすればよいかわかりません。

### My Script ###
read -p "Overlap (LO or LDO): " OVERLAP

### Recommended Script ###
#!bin/bash
number=""
while [[ ! $number =~ ^[0-9]+$ ]]; do
    echo Please enter your age
    read number
done
echo You are $number years old

ベストアンサー1

入力および検証ループは通常、次のように作成されます。

while true; do
    read -p 'Overlap (LO or LDO): ' overlap

    case $overlap in
        LO|LDO) # ok
            break
            ;;
        *) # not ok
            echo 'Please enter LO or LDO' >&2
    esac
done

つまり、答えが正しいことを確認すると、無限ループが壊れることになります。

明らかにあなたもできます

while true; do
    read -p 'Overlap (LO or LDO): ' overlap

    if [ "$overlap" = LO ] || [ "$overlap" = LDO ]; then
        # ok
        break
    fi
    # not ok
    echo 'Please enter LO or LDO' >&2
done

または、次の機能を備えたシェルを使用してくださいselect

echo 'Select overlap:' >&2
select overlap in LO LDO; do
    case $REPLY in
        [12]) # ok
            break
            ;;
        *) # not ok
            echo 'Please select LO or LDO' >&2
    esac
done

おすすめ記事