だから学習経験で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
...