シェルスクリプトでユーザーが入力したものを使用したいと思った事はありませんか?
ユーザーの入力したものを使用する事で、非常にインタラクティブなスクリプトが完成します。
シェルスクリプトではreadを使用すれば可能です。
入力したものによって場合分けなども出来ます。そういった事を今回行います。
windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。
最後に業務でも使用できるシェルスクリプトも紹介するので、最後までご覧ください。
シェルスクリプトのreadでユーザーが入力したものを使用する方法
readコマンドの基礎
シェルスクリプトのreadコマンドの基礎を以下に示します。
read 変数
readの後に変数名を指定します。この行に来るとユーザーの入力待ちになります。
入力された文字列などが変数に格納されて、続きのスクリプトが実行されます。
readを使用したスクリプト説明
では実際のシェルスクリプトでreadを使用してみましょう!
echo 文字列を入力してください
read string
echo あなたが入力した文字は$stringです。
echoで入力を促します。そして2行目で「read string」にしてユーザーが入力したものを変数stringに入れるようにしまう。
3行目で変数stringに$をつけて変数展開しています。
表示させる文字列と変数を結合する方法は、そのままくっつけて記述すればOKです。
read基礎を実践
ではこのreadを使用したシェルスクリプトを実行してみます。
シェルスクリプトを実行するやり方は様々ありますが、「. シェルスクリプト名」で実行します。
文字列を入力してください
1行目の文字列が表示されています。2行目でユーザーの入力待ちになっています。今回は「test」と入力してエンターします。
あなたが入力した文字はtestです。
きちんと入力した値が入った文字列が表示されています。
readとifを使用して場合分けをしてみる
ではreadとifを使用して、ユーザーが入力したもので処理を分けてみます。
シェルスクリプトでifを使用して複数条件を指定する基礎は以下です。
if 条件1
条件1にマッチした処理
elif 条件2
条件2にマッチした処理
else その他
どれにも当てはまらなかった処理
fi
です。「elif」を増やしていく事で更なる条件分岐が出来ます。
ではreadとifを組み合わせて、以下のシェルスクリプトを作成してみます。
echo 1,2,3のうちどれかを入力してください
read input
if [[ $input == 1 ]]; then
echo 1を選んだ処理を書く
elif [[ $input == 2 ]]; then
echo 2を選んだ処理を書く
elif [[ $input == 3 ]]; then
echo 3を選んだ処理を書く
else
echo その他の処理を書く
fi
readとifのシェルスクリプト説明
1行目のechoで説明文を表示して入力を促しています。2行目のreadでユーザーの入力したものを変数「input」に入れます。
3行目からifとreadで入力した数字で処理を分けています。1なら初めの処理、2なら次の処理、3なら3番目の処理、それ以外を選べばその他の処理が実行されます。
readとifのシェルスクリプト実行
ではこのread,ifのシェルスクリプトを実行します。
1,2,3のうちどれかを入力してください
ここで入力待ちになります。1を入力してみます。
1を選んだ処理を書く
1の処理が実行されてシェルスクリプトが終わりました。
では次は「test」と文字列を入力してみます。
その他の処理を書く
どの条件にも当てはまらずelseの処理が表示されました。
実践:readとwhileを使用した実務でも使えるシェルスクリプト
では最初のシェルスクリプトをwhileと関数を使用して、実践でも使用できる業務レベルまで引き上げます。
最初に実行したシェルスクリプトは入力した文字を表示するものでした。
echo 文字列を入力してください
read string
echo あなたが入力した文字は$stringです。
しかし何も入力しないでも「あなたが入力した文字はです。」と表示されます。
これでは実務では使用できません。
実践でも使用できる業務レベルのシェルスクリプト
これをユーザーが入力するまで繰り返しヒアリングするシェルスクリプトに変更してみましょう!
#関数を使用します
function string_input(){
echo 文字列を入力してください
read string
}
#whileで変数の値が0の場合は関数に戻り続けます。変数が入力されたら抜けます。
while [[ -z $string ]]
do
string_input
done
echo あなたが入力した文字は$stringです。
業務で使用するシェルスクリプトは、後から誰が見てもわかるようにコメントアウトして説明文をつけましょう!
業務レベルのシェルスクリプト説明
functionで関数を作成しています。{}で囲った処理を呼び出す事が出来ます。
function名を「string_input」として文字列を入力させる処理を記述しています。
whileで変数「string」の文字列が0の場合は関数「string_input」を呼び出すようにしています。
これでユーザー入力が空白であれば、入力処理に戻る事が可能です。
入力されればwhileの繰り返しを抜けて、文字列を表示してシェルスクリプトが終了します。
業務レベルのシェルスクリプト実行
ではこのシェルスクリプトを実行して、何も入力せずにエンターを何回か押してみます。その後「test」と入力してみます。
文字列を入力してください
文字列を入力してください
文字列を入力してください
test
あなたが入力した文字はtestです。
何度も入力を促されて、文字を入力すると想定の文字列が表示されました。
シェルスクリプトでreadを自分のモノにすれば、一層楽しくなるので極めてみてください。