今回は小ネタ!
皆さんは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 | 順不同、他にもなんかあるかもですが割愛 |
---|