bashのビルドインでselectコマンドがあります。
このselectを利用すると簡単に選択メニューを実現することができます。
以下、selectを利用したサンプルシェルスクリプトおよび実行結果を記します。
尚、利用したディストリビューションはUbuntuです。
シェルがbashであれば他のディストリビューションでも同様に動作するはずです。
以下のselectを用いたサンプルスクリプトを説明します。
1 #!/bin/bash
2
3 echo What linux distribution do you use?
4 ans1="Debian"
5 ans2="Ubuntu"
6 ans3="LinuxMint"
7 ans4="CentOS"
8 ans5="fedora"
9
10 select ANS in "$ans1" "$ans2" "$ans3" "$ans4" "$ans5"
11 do
12 if [ -z "$ANS" ]; then
13 continue
14 else
15 break
16 fi
17 done
18
19 echo You selected $REPLY\) $ANS
sakura@ubuntu:~$ ./select-1.sh What linux distribution do you use? 1) Debian 2) Ubuntu 3) LinuxMint 4) CentOS 5) fedora #? 2 You selected 2) Ubuntu
範囲外の値を入力した場合
$ ./select-1.sh What linux distribution do you use? 1) Debian 2) Ubuntu 3) LinuxMint 4) CentOS 5) fedora #? 100 #?
上記の実行結果より、$REPLYには入力した文字(数字)が格納され、$ANSには数字に対応した文字列が格納されることがわかります。
また、範囲外の値を入力した場合(上記では100を入力)は、再度#?プロンプトが表示されるのがわかります。
selectではPS3変数にプロンプトメッセージを設定することにより#?を変更することができます。
以下にselect-01.shを一部変更したサンプルシェルスクリプトを記します。
1 #!/bin/bash
2
3 PS3="What linux distribution do you use? >"
4 ans1="Debian"
5 ans2="Ubuntu"
6 ans3="LinuxMint"
7 ans4="CentOS"
8 ans5="fedora"
9
10 select ANS in "$ans1" "$ans2" "$ans3" "$ans4" "$ans5"
11 do
12 if [ -z "$ANS" ]; then
13 continue
14 else
15 break
16 fi
17 done
18
19 echo You selected $REPLY\) $ANS
変更行は3行目だけです。
echoで表示していたメッセージをPS3に設定するように変更しました。
以下、範囲外を指定し、その後3) LinuxMintを選択したときの実行結果です。
$ ./select-2.sh 1) Debian 2) Ubuntu 3) LinuxMint 4) CentOS 5) fedora What linux distribution do you use? >100 What linux distribution do you use? >3 You selected 3) LinuxMint
PS3にメッセージを設定することにより選択一覧表示後、入力プロンプトが指定したメッセージになります。