予想される整数式を取得するのはなぜですか?

予想される整数式を取得するのはなぜですか?

だから学習経験でbashでメニューシステムを作ってみました。これを行う方法は数え切れないほど多く、さらに「より良い」方法があると確信しています。しかし、私が持っている方法は次のとおりです。

echo "
2nd Menu
********
1) command
2) command
M) Main menu
X) Exit program
"
read -p "Choose option >" opt
if [ "$opt" -eq 1 ]; then
    commands
elif [ "$opt" -eq 2 ]; then
    commands
elif [[ "$opt" = [m,M] ]]; then
    main #calls the function main()
elif [[ "$opt" = [x,X] ]]; then
    exit
else
    echo "Invalid option"
    main
fi

このスクリプトは、「X)プログラムの終了」を除くすべてのオプションで動作します。 「X」または「x」を実行すると、このエラーが発生します。

./acct-mgr.sh: line 10: [: x: integer expression expected
./acct-mgr.sh: line 12: [: x: integer expression expected
Invalid option

これは私を混乱させる!私は、各データ型(整数の場合は-eq、文字列の場合は=)に対して正しい比較演算子を使用しており、「x」を除くすべてのオプションが機能すると確信しています。

どんな助けでも大変感謝します。ありがとうございます。

PS - あなたが望む結果を得るための別の方法を教えてくれてありがとう。しかし、それにもかかわらず、なぜこれが私の経験的な方法には適用されないのかを知りたいです。もう一度ありがとうございます。

ベストアンサー1

M / mまたはX / xを入力すると、数値以外の数値を数値と比較するため、-eqエラーが発生します。時々文字列になりたい場合は、$opt常に文字列として扱います。

...
if [ "$opt" = "1" ]; then
    commands
elif [ "$opt" = "2" ]; then
    commands
...

おすすめ記事