自主的20%るぅる

各々が自主的に好き勝手書くゆるふわ会社ブログ

sh/bash使いなら押さえておきたい簡単メニュー作成法!

今回は小ネタ!

皆さんは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 順不同、他にもなんかあるかもですが割愛
Let’s share this article!

{ 関連記事 }

{ この記事を書いた人 }

アバター画像
Yuta Hayakawa

2016年6月入社。2020年12月より取締役に就任しました。

普段は東京本社で管理職のお仕事したり、広報的役割としてテキスト書いたり動画作ったりするのが最近のお仕事。

自称「社内システムチーム統括」として、社内システムチームの面々を見守りつつ毎日を過ごしています。

プライベート面では、音楽やコンピュータ関連、ゴルハム&ジャンハム関係、ゲーム関係が興味あるポイント。

あと、我が子可愛い。

記事一覧