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

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2021年11月24日 (水) 18:06時点におけるWiki (トーク | 投稿記録)による版 (文字列「source lang」を「syntaxhighlight lang」に置換)
ナビゲーションに移動 検索に移動

概要

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

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


select文の書式

<syntaxhighlight lang="sh">
<文字列変数>="<選択を促す文字列>"
<配列変数>="<配列>"

select <変数> in <配列変数>
do
   <変数に応じた処理>
done
</source>



select文のサンプル(1)

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

<syntaxhighlight lang="bash">
#!/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."
</source>


# 実行結果
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文を使用する時に、内部で生成される特別な変数である。
この中には、ユーザが入力した値が代入される。(数字のほか文字列も表示される)

<syntaxhighlight lang="bash">
#!/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
</source>


# 実行結果
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