#navi(../)
* 選択メニューを簡単に実現する・selectコマンド [#ea5716dd]
bashのビルドインで''select''コマンドがあります。~
この''select''を利用すると簡単に選択メニューを実現することができます。
#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
* selectを利用て選択メニューを作る [#we09d429]
以下、selectを利用したサンプルシェルスクリプトおよび実行結果を記します。~
尚、利用したディストリビューションはUbuntuです。~
シェルがbashであれば他のディストリビューションでも同様に動作するはずです。
** selectを利用したサンプルシェルスクリプト [#p58bf6c1]
以下のselectを用いたサンプルスクリプトを説明します。
#ref(select-1.sh)
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
- 3行目 : メッセージの表示
- 4行目~8行目 : 選択肢の設定
-10行目 : selectで選択メニューを表示(select ... do ... done の構文となる)
-12行目 : 範囲外の値を入力された場合、$ANSには何もセットされないのでtest -z を用いて判定している。
-13行目 : doループの先頭に戻る
-14行目~16行目 : $ANSに選択した項目の文字列がセットされた場合、do ... done のループから抜ける。
-19行目 : 入力された文字が$REPLYにセットされ、$ANSには$ans1~$ans5に設定された文字列がセットされているので、echoを使って表示。
** 実行結果(select-01.sh) [#z293b50e]
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を入力)は、再度#?プロンプトが表示されるのがわかります。
* #?プロンプトの変更 [#b50204f1]
selectではPS3変数にプロンプトメッセージを設定することにより#?を変更することができます。~
以下にselect-01.shを一部変更したサンプルシェルスクリプトを記します。
#ref(select-2.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に設定するように変更しました。
** 実行結果(select-02.sh) [#bcbdeb18]
以下、範囲外を指定し、その後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にメッセージを設定することにより選択一覧表示後、入力プロンプトが指定したメッセージになります。
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)