CONTENT
こんにちは、大阪エンジニアのYです。
業務でJavaプログラムの起動や、定例的なファイル操作等を行う際に使用することの多いシェル。例に漏れず私も使用する機会が多くあります。
今更ながらシェル起動後にユーザの入力に応じて処理を切り換えるような、いわゆる「対話形式」のシェルを扱う機会があったので実装方法を簡単に紹介いたします。
まずは以下のような簡単なシェルを用意します。
実行するとパラメータで与えられた2つの数字を合算し、結果を表示するといった内容です。
[text.sh]
実行結果としては次のようになります。
[test.sh 実行結果]
このシェルだと「計算」という目的は達成できていますが、パラメータの内容を把握していないといけないので初見で実行しようとする場合に戸惑うかもしれません。
ここで計算対象の数値をパラメータではなく対話形式で指定できることで、よりユーザーフレンドリーなシェルに作り変えてみましょう。
対話形式のシェルを作成する際には、標準入力から読み込んで変数に格納するコマンド「read」を使用します。今回は入力を促す際にラベルを表示したいので「-p」オプションを付けておきます。
# read -p [LABEL] val1
とすることでシェル実行時に「[LABEL]」と表示されたラベルに続き、入力された値が「val1」に代入されます。
パラメータ部分を対話形式に置き換え、少し説明文を加えた内容が次のようになります。
[test_ver2.sh]
実行結果は次のようになります。
[test_ver2.sh 実行結果]
こうしておくことで「どういったパラメータが必要なのか」を事前に分かっていなくても促される内容を入力することで目的の処理を実行することができました。
上記は簡単な例でしたが例えばシェル起動後に後続の処理を実行するか否かの確認を
# read -p [y/n] judge
みたいなかたちでユーザに入力させておき、「judge」の値が「y」以外だったら以降の処理を実行させないような実装で実現することもできます。
その他にも色々な場面で活躍してくれる機能ですので、是非この機会に覚えて貰えると幸いです!