このエントリーをはてなブックマークに追加


選択メニューを簡単に実現する・selectコマンド

bashのビルドインでselectコマンドがあります。
このselectを利用すると簡単に選択メニューを実現することができます。


selectを利用て選択メニューを作る

以下、selectを利用したサンプルシェルスクリプトおよび実行結果を記します。
尚、利用したディストリビューションはUbuntuです。
シェルがbashであれば他のディストリビューションでも同様に動作するはずです。

selectを利用したサンプルシェルスクリプト

以下の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
  • 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)

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に設定するように変更しました。

実行結果(select-02.sh)

以下、範囲外を指定し、その後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にメッセージを設定することにより選択一覧表示後、入力プロンプトが指定したメッセージになります。



添付ファイル: fileselect-1.sh 551件 [詳細] fileselect-2.sh 672件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:26:52