ユーザー入力の基本
bash スクリプトの中で、read 変数名
とすると、ユーザーがキーボードで入力したテキストを変数に取得することができます。
変数名
の部分には、$
プレフィックスを付けないことに注意してください(変数の内容を参照するときは $
が必要です)。
#!/bin/sh
echo -n "Enter your name: "
read name
echo "Hello, $name"
$ ./hello.sh
Enter your name: まくまく
Hello, まくまく
☝️ echo の -n オプション
echo
コマンドの出力はデフォルトで末尾で改行されますが、-n
オプションを使うとこの改行を抑制できます。
上記の例のように、プロンプト表示で利用できます。ユーザーが y を入力したときだけ処理を継続する
read
コマンドの典型的な使用例として、ユーザーに y/n
の選択肢を入力させるものがあります。
次の remove_all
関数は、何もかもを削除する前に、ユーザーに最終確認を行っています。
#!/bin/bash
function remove_all {
echo -n 'Are you sure? (y/n): '
read input
if [ "$input" = 'Y' -o "$input" = 'y' ]; then
echo 'All things have been removed!'
fi
}
remove_all
if
の中で $input
の内容を確認するときに、ダブルクォーテーションで囲んでいるのは、ユーザーの入力がなかった場合に空文字 ""
を取得するためです。
これがないと、ユーザーが何も入力せずにエンターした場合にエラーになってしまいます。
$ ./remove.sh
Are you sure? (y/n): y
All things have been removed!
スペースで区切られたユーザー入力を別々の変数に取得する
read
コマンドの後ろに複数の変数を指定すると、スペースで区切られたユーザー入力を別々の変数に取得することができます。
#!/bin/sh
read aaa bbb ccc
echo "aaa = $aaa"
echo "bbb = $bbb"
echo "ccc = $ccc"
$ ./sample.sh
100 200 300
aaa = 100
bbb = 200
ccc = 300
read
に指定した変数の数よりも、入力が少ない場合は、変数が空になります。
$ ./sample.sh
100 200
aaa = 100
bbb = 200
ccc =
逆に、入力の方が多い場合は、read
コマンドの最後に指定した変数にまとめて格納されます。
$ ./sample.sh
100 200 300 400 500
aaa = 100
bbb = 200
ccc = 300 400 500