Unix-select-loop

提供:Dev Guides
移動先:案内検索

Unix/Linux Shell-選択ループ

*select* ループを使用すると、ユーザーがオプションを選択できる番号付きメニューを簡単に作成できます。 ユーザーに選択肢のリストから1つ以上のアイテムを選択するように依頼する必要がある場合に役立ちます。

構文

select var in word1 word2 ... wordN
do
   Statement(s) to be executed for every word.
done

ここで、_var_は変数の名前で、 word1 から wordN はスペース(単語)で区切られた文字のシーケンスです。 for ループが実行されるたびに、変数varの値は、単語リストの次の単語 word1wordN に設定されます。

選択ごとに、一連のコマンドがループ内で実行されます。 このループは ksh で導入され、bashに適応されました。 sh では使用できません。

ユーザーが好みの飲み物を選択できるようにする簡単な例を次に示します-

#!/bin/ksh

select DRINK in tea cofee water juice appe all none
do
   case $DRINK in
      tea|cofee|water|all)
         echo "Go to canteen"
         ;;
      juice|appe)
         echo "Available at home"
      ;;
      none)
         break
      ;;
      *) echo "ERROR: Invalid selection"
      ;;
   esac
done

選択ループによって提示されるメニューは次のように見えます-

$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
#? juice
Available at home
#? none
$

次のように変数PS3を変更することにより、選択ループによって表示されるプロンプトを変更できます-

$PS3 = "Please make a selection => " ; export PS3
$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
Please make a selection => juice
Available at home
Please make a selection => none
$