今回は小ネタ!
皆さんはUnix/Linux/Unix/*BSD1)順不同、他にもなんかあるかもですが割愛で何のシェルを使ってますか?
私はsh/bashをよく使ってます。どの環境にもデフォルトで入っていることが期待できるので(〃・ω・〃)
sh/bashで簡単なメニューを作りたいってことあるじゃないですか。インタラクティブなやつ。
実は簡単に実装できるんだよ〜ってことを覚えておくと、いろいろ捗るんですよね……ってお話です。
まずはコードをご覧ください
まあ、こんな感じのコードを書けば作れるんですよね。ええ。
#!/bin/sh
# Set prompt
PS3="Choose number > "
# Set Menu items as array
menu="foo bar baz qux"
# Display guide message
echo "<<<Choose a number! or Enter 'q' for exit!>>>"
# Read your choise(Set choosen number in $item, enter text in $REPLY)
select item in $menu
do
# If enter 'q', exit this shell.
if [ "${REPLY}" = "q" ]; then
echo "Bye! ;-)"
exit 0
fi
# Do something based on your choose.
case "$item" in
"foo" )
echo "You chose FOO!";;
"bar" )
echo "You chose BAR!";;
"baz" )
echo "You chose BAZ!";;
"qux" )
echo "You chose QUX!";;
* )
echo "You chose wrong number ($REPLY)"
esac
done
ではでは、かるーぅくコードの解説をば。
4行目☆
ここではプロンプト変数である「PS3」をカスタマイズしています。
selectを使ったときに表示されるプロンプトですね。
7行目☆
ここではメニュー項目に表示したいテキストラベルを配列でセットしています。
10行目☆
ここでは単純にガイドメッセージを表示しています。
12〜37行目☆
ここがメイン部分です。細かく見ていきましょう。
13行目†
selectを使ってメニューの表示と入力内容の取得をおこなっています。
メニューに表示される内容は7行目でセットされたアレですね。
入力内容について、入力に対応したメニューのテキストラベルが$itemに、入力された文字そのものが$REPLYに格納されます。
16〜19行目†
ここでは「q」が入力されたときに終了する処理をおこなっています。
22〜33行目†
選択された内容に応じて個別の処理をおこなっています。
メニューにないものが選択されたら、エラーメッセージを表示しています。
実行例はこんな感じ!
こんな感じのコードを書くと、こんな感じでメニューを実現することができます。
$ sh ./menu.sh <<<Choose a number! or Enter 'q' for exit!>>> 1) foo 2) bar 3) baz 4) qux Choose number > 1 You chose FOO! Choose number > 2 You chose BAR! Choose number > 3 You chose BAZ! Choose number > 4 You chose QUX! Choose number > 5 You chose wrong number (5) Choose number > q Bye! ;-)
便利だね☆
注訳はこちら
| ↑1 | 順不同、他にもなんかあるかもですが割愛 |
|---|