シェルスクリプトでは、対話的にユーザーからの入力を受け付けることもできます。
本記事では、シェルスクリプトでユーザーからの入力を受け付ける方法について詳しく説明します。
目次
基本的な入力の受け付け
シェルスクリプトでユーザーからの入力を受け付けるには、readコマンドを使用します。readコマンドは、標準入力からデータを読み取り、その値を変数に格納します。
単一の値の読み取り
以下は、単一の値を読み取る基本的な例です。
#!/bin/bash
# ユーザーに名前を入力させる
echo "あなたの名前を入力してください:"
read name
# 入力された名前を表示する
echo "こんにちは、$nameさん!"
このスクリプトを実行すると、ユーザーに名前を入力するように促し、その名前を使用して挨拶文を表示します。
複数の値の読み取り
readコマンドを利用して複数の値を一度に読み取ることもできます。
#!/bin/bash
# ユーザーに名前と年齢を入力させる
echo "あなたの名前と年齢を入力してください (例: Tanaka 22):"
read name age
# 入力された情報を表示する
echo "こんにちは、$nameさん! あなたの年齢は$age歳です。"
ここでは、ユーザーが2つの値(名前と年齢)を空白で区切って入力すると、それぞれの値がnameとageという変数に格納されます。
入力プロンプトをカスタマイズする方法
readコマンドは、-pオプションを使ってプロンプトメッセージを直接指定することもできます。Echoを使う必要がないので、こちらの方がシンプルです。
#!/bin/bash
# 入力プロンプトをカスタマイズする
read -p "あなたの好きな色を教えてください: " color
# 入力された色を表示する
echo "あなたの好きな色は$colorですね"
入力のタイムアウトをする方法
ユーザーの入力を待機する時間を制限する場合は、-tオプションを使用します。以下のスクリプトでは5秒以内に入力しないと、タイムアウトして「タイムアウトしました」とメッセージが表示されます。
#!/bin/bash
# 5秒のタイムアウトを設定する
if read -t 5 -p "5秒以内に何か入力してください: " input; then
echo "入力された内容: $input"
else
echo "タイムアウトしました"
fi
入力された情報を隠蔽する方法
入力を隠す必要がある場合(例えばパスワードを入力する場合)は、-sオプションを使用します。
#!/bin/bash
# パスワードの入力を隠す
read -sp "パスワードを入力してください: " password
echo # 改行を入れる
echo "パスワードが設定されました。"
まとめ
シェルスクリプトでユーザーからの入力を受け付けることで、スクリプトをよりインタラクティブにすることができます。