#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)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS