シェルスクリプトの基礎 - select文

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

select文を使用すると、簡易的な対話型メニューが簡単に作成できる。(繰り返し文 + メニュー表示機能のような処理)
実際には、メニューを表示して反復処理に入り、変数と分岐処理を使用して制御することが多い。

なお、select文はbashで追加された制御文であり、shには対応していない。


select文の書式

 <文字列変数>="<選択を促す文字列>"
 <配列変数>="<配列>"
 
 select <変数> in <配列変数>
 do
    <変数に応じた処理>
 done



select文のサンプル(1)

以下の例では、変数STRINGに代入した内容が、select文のところで標準出力されている。

 #!/bin/bash
 
 STRING="Input number: "
 menu="apple orange banana finish"
 
 select var in ${menu}
 do
    echo "You selected ${var}"
    if [ ${var} = "finish" ]; then
       exit 1
    fi
 done
 
 echo "Finish script."


# 実行結果
1) apple
2) orange
3) banana
4) finish
Input number: 1
You selected apple
Input number: 2
You selected orange
Input number: 3
You selected banana
Input number: 4
You selected finish



select文のサンプル(2)

以下の例では、caseで処理を分岐およびコマンドを実行して、終了後にプロンプトを再表示するようにしている。

変数REPLYはselect文を使用する時に、内部で生成される特別な変数である。
この中には、ユーザが入力した値が代入される。(数字のほか文字列も表示される)

 #!/usr/bin/bash
 
 STRING="Input number: "
 menu="pwd ls exit"
 
 select VAR in ${menu}
 do
    # 反復処理の中でcase文を使用している
    case $VAR in
       "ls" ) ls -1 ;;
       "pwd" ) pwd ;;
       "exit" ) break ;;
       * ) echo "あなたの入力した番号は$REPLYです"
    esac
 done


# 実行結果
1) pwd
2) ls
3) exit
Input number: 1
/home/<ユーザ名>/SampleScripts
Input number: 2
a.txt
b.txt
Input number: 4
あなたの入力した番号は4です
Input number: 3