選択メニューを簡単に実現する・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

実行結果(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 737件 [詳細] fileselect-2.sh 885件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2025-03-08 (土) 13:24:43