概要
ここでは、シェルスクリプトでキーボードからの入力を受け付ける方法を記載する。
入力
readコマンドを使用することで、キーボードから入力した内容を変数に格納することができる。
read 変数名
入力データの表示
以下の例では、キーボードで入力したデータを変数DATA
へ格納し、その内容を表示させている。
read
コマンドで入力データを読み込んだ後は、そのまま処理が継続する。
これを利用することで、何かキー入力されるまで処理を停止させることができる。
#!/bin/bash
echo -n "Press any key: "
read DATA
echo ""
echo "Entered key: $DATA"
-pオプションを使用することで、こういう記述方法ができる。
read -p "表示する文" 変数名
#!/bin/bash
read -p "Press any key: " DATA
echo ""
echo "Entered key: $DATA"
入力データと処理の分岐
caseコマンドと組み合わせることで、入力されたキーの内容によって処理を分岐することができる。
以下では、yキーを入力した場合はOK、nキーを入力した場合はNG、それ以外の場合はPush y or n key.と表示させる。
#!/bin/bash
read -p "Are you ok ? (y/n): " DATA
case "$DATA" in
[yY]) echo "OK" ;;
[nN]) echo "NG" ;;
*) echo "Push y or n key."
esac
入力データと反復処理
入力した内容によって処理を繰り返したい場合は、whileコマンドと組み合わせる。
以下のシェルスクリプトでは、
Repeat ?(y/n):と表示した後、yキーを入力すると処理を繰り返して、また、Repeat ?(y/n):と表示して入力待ちとなる。
nキーを入力すると、End Repead.と表示してbreakにより繰り返し処理から抜ける。
yキーまたはnキー以外が入力された場合、Input y or n keyと表示して、再度、Repeat ?(y/n):と表示して入力待ちとなる。
#!/bin/bash
while :
do
read -p "Repeat ? (y/n): " DATA
if [ "$DATA" = "y" ]; then
echo "Repeat !!"
elif [ "$DATA" = "n" ]; then
echo "End repead."
break
else
echo "Input y or n key"
fi
done
複数の入力データ
変数を複数用意することで複数の入力を受け付けることができる。
以下のシェルスクリプトでは、変数DATA1、DATA2、DATA3という3つの変数を宣言しているので、
スペース(タブでも可)で区切った3つの値を変数に格納することができる。
#!/bin/bash
read -p "Press any key: " DATA1 DATA2 DATA3
echo ""
echo "Entered key: $DATA1"
echo "Entered key: $DATA2"
echo "Entered key: $DATA3"
※区切り文字を変更する場合
区切り文字は、環境変数のIFSを使用することで変更することができる。
以下のシェルスクリプトでは、区切り文字をカンマ(,)に変更して実行している。
#!/bin/bash
IFS=, read -p "Press any key: " DATA1,DATA2,DATA3
echo ""
echo "Entered key: $DATA1"
echo "Entered key: $DATA2"
echo "Entered key: $DATA3"
readコマンドのオプション
readコマンドには複数のオプションがあるが、下表によく使用するオプションを記載する。
オプション | 説明 |
---|---|
-a 変数 | 入力した値を配列変数に格納する。 |
-n 文字数 | 文字数で指定した分だけ読み込む。 キーボードで直接入力すると、2文字を入力した時点で、自動的に入力処理が終了して値が変数に格納される。 また、コピー&ペーストで2文字以上の文字を入力した場合も、指定した分だけが変数に格納される。 |
-p 文字列 | 文字列を表示した後、入力待ちになる。 改行文字が入力されると、入力の受け付けが終了する。 |
-r | \(バックスラッシュ)を文字列として変数に格納する。 |
-s | 画面上に入力した文字を表示しない。 |
-t 秒数 | 入力待ち時間に制限を付ける。 |
出力
echoコマンド
echoコマンドで変数の値を出力する時は、以下のように、ダブルクォートで囲む必要がある。
# 実行
$DATA="AAA BBB CCC"
echo "$DATA"
# 出力
AAA BBB CCC
echoコマンドと文字の色
echo
コマンドにおいて、出力内容の色を変更するには、以下のように記述する。
# 実行
error()
{
echo -e "\033[31m$*\033[00m"
}
warn()
{
echo -e "\033[33m$*\033[00m"
}
info()
{
echo -e "\033[32m$*\033[00m"
}
# 出力 error 'Error message' warn 'Warning message' info 'Information message' </source>