Table of Contents
readコマンドで実行時以外にも入力を受け取る
今までは、シェルスクリプト内で使いたい数値などを実行時引数として入力していました。今回はシェルスクリプトの実行中に数値や文字列を入力するにはどうすればよいかを解説します。
readコマンド
入力を受け取るにはreadコマンドを使用します。次の例では、入力された文字列を変数 val に代入し、それを表示します。
#!/bin/bash read val echo "入力された文字列は${val}"
このシェルスクリプトを実行すると、ユーザーの入力を受け取る状態になります。何か文字列を入力しEnterキーを押すと、echoの出力が表示されます。
入力を促すメッセージを表示
入力待ちであることを明示するためのメッセージを表示するには、-p オプションを使います。このオプションを指定した後に表示したいメッセージを書きます。
#!/bin/bash read -p "何か入力してください: " val echo "入力された文字列は${val}"
一度に複数の入力を受け取る
複数の入力を受け取りたいときは、受け取りたい個数分の変数をreadコマンドの後に書きます。入力側では、半角スペースで区切ることで複数の入力ができます。
#!/bin/bash read -p "3つ文字列を入力してください: " one two three echo "入力された文字列は${one}と${two}と${three}です。"
実行例
3つ文字列を入力してください: aaa bbb 123
出力結果
入力された文字列はaaaとbbbと123です。
練習問題
readコマンドを使って、以下の条件を満たすシェルスクリプトを作ってください。
- シェルスクリプトを実行すると「2つの数を入力してください: 」と表示され、入力待ち状態になる。
- 2つの数値を入力すると、大きい方が表示される。同じ数だった場合は「同じです」と表示される。
答え(クリックで開く)
#!/bin/bash read -p "2つの数を入力してください: " first second if [ ${first} -gt ${second} ] then echo ${first} elif [ ${first} -lt ${second} ] then echo ${second} else echo "同じです" fi
または
#!/bin/bash read -p "2つの数を入力してください: " first second if ((${first} > ${second})) then echo ${first} elif ((${first} < ${second})) then echo ${second} else echo "同じです" fi
※ 変数firstと変数secondの名前は自由です。
※ if文の条件の部分は他の書き方もできます。