• このエントリーをはてなブックマークに追加

【linux豆知識】readコマンドを使って対話的なシェルスクリプトを作る

  • このエントリーをはてなブックマークに追加

read
zaco muraです。

前回、脱初心者!シェルスクリプトで覚えたい3つのテクニックという記事を書きましたが、またシェルスクリプトのことを書きます。

スポンサーリンク
Sponsords Link

使いやすいツールに必要な”対話的”

シェルスクリプトを作る目的はいろいろありますが、いずれの場合でも使いやすさを考えることは必要です。”使いやすさ”も様々な条件があるかと思いますが、「誰でも」使いやすいツールには対話的な使い方ができることが望ましいと思います。
例えば、コマンドを実行するためにたくさんのオプションが必要な場合、実行時に並べて入力するより、1個ずつ聞いてくれたほうが親切ですよね。(あれ、このオプションってどういう意味だっけ?とかよくありがち)

対話的シェルスクリプトに必要なコマンド : read

さて、そのような対話的なスクリプトは readコマンド を使うことで作れます。
ちょっと試しに作ってみましょう。こんな感じです。

内容としては「ラーメン、つけめん、、、」との部分はツールが表示していて、その後正しく「ぼくイケメン」と入力できれば「オッケーイ!」と返してくれるツールです。
違う場合、例として「そうめん」と入力した場合は「違います」と教えてくれます。

ソースコードはこちら

#!/bin/sh
###############
# kano_eikou.sh
###############

# 入力があるまで無限ループ
while true ;  do

        # キーワード入力を促す部分
        echo -n "ラーメン、つけめん、、、、、、"

        # 標準入力からキーワードを読み込むコマンド (read) => 変数KEYWORDに格納される
        read KEYWORD

        # 変数KEYWORDが空文字なら無限ループする
        if [ "${KEYWORD}" == "" ];then

                # ループの先頭に戻る
                continue
        fi

        # 入力があった場合、内容をチェック。"ぼくイケメン"なら正解
        if [ "${KEYWORD}" == "ぼくイケメン" ];then

                echo "オッケーイ!"

                # ループを脱出
                break

        # それ以外なら失敗
        else
                echo "違います"

                # ループを脱出
                break
        fi
done

どうでしょうか。けっこう簡単にできますね。

ソースコード解説

ソースコードの詳細はコメント行に書いていますが、ポイントとしては

・while true ; do ~~~ done の部分で無限ループを作る。(入力が無ければ再度「ラーメン、つけめん、、、」を表示)
・入力があった場合は内容を判定

というところです。

これを使えば、順番に必要事項を入力し、誤った内容(例えば桁数など)であれば訂正を求めるなどのツールができそうですね。

スポンサーリンク
Sponsords Link
  • このエントリーをはてなブックマークに追加

ZacoDesign

スポンサーリンク
Sponsords Link