Categories: shellscript

シェルスクリプトでキー入力を受け付ける方法

シェルスクリプトでは、対話的にユーザーからの入力を受け付けることもできます。

本記事では、シェルスクリプトでユーザーからの入力を受け付ける方法について詳しく説明します。

基本的な入力の受け付け

シェルスクリプトでユーザーからの入力を受け付けるには、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 "パスワードが設定されました。"

まとめ

シェルスクリプトでユーザーからの入力を受け付けることで、スクリプトをよりインタラクティブにすることができます。

Haruoka