Linux で read コマンドを使用する方法と例

Linux の read コマンドは、標準入力 (キーボードなど) またはファイルから入力行を読み取るために使用される組み込みシェル コマンドです。これは、ユーザー入力のキャプチャ、対話型スクリプトの作成、およびユーザー操作を必要とするタスクの自動化のために、シェル スクリプトでよく使用されます。read コマンドを使用すると、入力を変数に割り当てたり、時間制限を設定したり、入力読み取りの動作を制御したりできるため、スクリプト作成用の多目的ツールになります。

このガイドでは、Linux で read コマンドを使用する方法を実際の例を使って説明します。これらの例では、基本的な使用方法、複数の変数の読み取り、タイムアウトの設定、区切り文字の使用について説明します。これらの実際のシナリオで read コマンドを習得することで、よりインタラクティブで動的なシェル スクリプトを作成し、自動化タスクを強化できます。

Linux の読み取りコマンドの構文

基本的な構文とオプションを理解する

read Linux のコマンドは構造化されていますが、その柔軟性はシェル スクリプトのさまざまな入力シナリオにとって重要です。基本的な構文は次のとおりです。

read [options] [variable_name]

ここで、[options] はコマンドの動作を変更し、[variable_name] は入力を保存します。変数を指定しない場合は、入力がデフォルトの REPLY 変数になります。

読み取りコマンドの共通オプション

  • -p カスタムプロンプト: このオプションを使用すると、プロンプト文字列を設定して、スクリプトを対話型にしてユーザーをガイドすることができます。
  • -t 時間指定入力: 読み取り操作にタイムアウトを導入し、指定された期間内に入力が提供されない場合にスクリプトを自動的に進めます。
  • -s サイレントモードの場合: 機密データに不可欠なこのモードでは、入力が端末ディスプレイから非表示になります。
  • -n 文字数制限について: 入力を設定された文字数に制限します。入力の長さを制御するのに最適です。
  • -r バックスラッシュエスケープを無効にする: バックスラッシュをエスケープ文字ではなくリテラル文字として扱います。

Linux の read コマンドの実例

このセクションでは、Linux での read コマンドの実際の使用例を紹介します。このコマンドは、スクリプト作成者やシステム管理者にとって不可欠なツールであり、ユーザーからの入力を要求したり、ファイルを 1 行ずつ読み取ったりすることができます。これらの例を通じて、さまざまなシナリオで read コマンドを効果的に活用する方法を学びます。

ユーザー入力の読み取り

Linux の read コマンドは、通常、ユーザー入力をキャプチャします。これは、ユーザーからのフィードバックや選択を必要とするスクリプトに役立ちます。簡単な例を見てみましょう。

echo "Please enter your name: "
read name
echo "Welcome, $name!"

この例では、スクリプトはユーザーに名前を入力するよう求めます。read コマンドは入力をキャプチャし、変数 name に保存します。最後に、スクリプトはユーザーの入力内容を表示します。

複数の値の読み取り

Linux の cd コマンドは、複数の入力を別々の変数に読み込むこともできます。これは、一度に複数のデータを収集する必要がある場合に便利です。

echo "Enter your first and last name: "
read firstname lastname
echo "Hello, $firstname $lastname!"

スクリプトでは、ユーザーがスペースで区切られた名と姓を入力することを想定しています。次に、read コマンドは最初の入力を変数 first name に割り当て、2 番目の入力を last name に割り当てます。

-p によるカスタムプロンプトの使用

入力をキャプチャする前に echo を使用してメッセージを表示する代わりに、-p オプションを使用して read コマンド内で直接プロンプトを指定できます。

read -p "Enter your age: " age
echo "You are $age years old."

このアプローチでは、プロンプトと入力の読み取りを 1 つのコマンドに結合することでコードを合理化します。

-s で入力を隠す

パスワードなどの機密情報の場合、Linux の read コマンドには、ユーザーの入力を非表示にする -s オプションが用意されています。

read -sp "Enter your password: " password
echo -e "\nPassword set."

-s オプションは、端末が入力文字を表示しないようにします。 echo -e “\n” は、入力後に新しい行に移動するために使用されます。-s は、通常 Enter キーを押すことによって生成される新しい行も抑制します。

ファイルからの読み取り

ユーザー入力以外にも、read コマンドはファイルからデータを読み取ることができます。ループと組み合わせると、ファイルの各行を 1 行ずつ処理できます。

while IFS= read -r line; do
  echo "Line: $line"
done < "/path/to/file.txt"

この例では、IFS= (内部フィールド区切り文字) によって先頭と末尾の空白が保持され、-r によってバックスラッシュがエスケープ文字として解釈されないようにします。スクリプトは、file.txt から各行を読み取り、それをエコーし​​ます。

Linux の read コマンドの高度な使用法

Linux の read コマンドの基本的な例を基にして、より洗練されたシナリオに焦点を当てます。これらの例では、時間制限のある入力、条件付き実行、複雑なデータ形式の処理など、スクリプトにおけるコマンドの適応性を紹介します。

ユーザー入力のタイムアウトの実装

対話型スクリプトでは、ユーザー入力の継続時間を制限する必要がある場合があります。read コマンドは、タイムアウトを秒単位で指定する -t フラグを使用してこれに対応します。

read -t 5 -p "Enter your preferred programming language (5 seconds): " language
if [ -z "$language" ]; then
  echo "Timeout reached. Defaulting to Python."
else
  echo "You chose $language."
fi

この例では、ユーザーは 5 秒間、好みのプログラミング言語を入力できます。ユーザーがタイムアウト内に何も入力しない場合、スクリプトはデフォルトで Python を使用します。

ループでユーザー入力を読み取る

場合によっては、特定の条件を満たすまでユーザーから一連の入力を収集する必要があります。ループ内で read コマンドを使用すると、このプロセスが容易になります。

while true; do
  read -p "Enter a number (or 'quit' to exit): " num
  case $num in
    [0-9]*) echo "Number $num recorded." ;;
    "quit") break ;;
    *) echo "Invalid input. Please enter a number or 'quit'." ;;
  esac
done

このスクリプトは、ユーザーが「quit」と入力するまで、継続的にユーザーに数値の入力を求めます。これは、ループ内で read を効果的に使用して、変数入力シナリオを処理する方法を示しています。

区切られたデータの処理

read コマンドを -a フラグと組み合わせて、特定の区切り文字に基づいて入力を配列に分割することができます。これは、カンマ区切り値 (CSV) や同様のデータ形式を処理する場合に特に便利です。

echo "Enter three favorite fruits separated by commas: "
IFS=',' read -ra fruits
for fruit in "${fruits[@]}"; do
  echo "Fruit: $fruit"
done

ここで、入力はカンマで区切られた果物のリストであることが想定されています。read コマンドは入力を果物の配列に分割し、反復して各果物を表示します。

パスワードを安全に読み取る

サイレント入力用の -s オプションについて説明しましたが、これをプロンプトとタイムアウトと組み合わせると、機密情報を読み取る際のセキュリティを強化できます。

read -t 10 -sp "Enter your password (10 seconds to type): " password && echo
echo "Password securely read."

このコマンドは、ユーザーにパスワードの入力を要求し、入力内容を非表示にして、パスワードの入力に 10 秒の制限を設けます。その後は、パスワードをエコーバックせずに続行します。

入力に基づく条件付き実行

ユーザー入力に基づいて条件付き実行を行う読み取りコマンドを活用すると、スクリプト内の意思決定プロセスを効率化できます。

read -p "Do you want to continue? [Y/n]: " answer
case "$answer" in
  [Yy]* ) echo "Proceeding...";;
  [Nn]* ) echo "Operation aborted."; exit;;
  * ) echo "Please answer yes or no.";;
esac

このスクリプトは、ユーザーに続行するかどうかを尋ねます。入力に応じて、操作を続行するか、中止するか、明確な回答を求めるプロンプトを表示します。これは、ユーザーの決定に基づいてスクリプトのフローを制御するための read の実用的な使用法を示しています。

結論

このガイドでは、Linux の read コマンドの基本構文から実用的な例、高度な機能までを取り上げました。ユーザー入力を読み取り、ファイルを処理し、データを効率的に処理する方法を示しました。最後のヒントは、スクリプトで read コマンドを試してみることです。これは、スクリプトの対話性とダイナミズムを強化できる多目的ツールです。練習を続け、その可能性を最大限に引き出してください。

Joshua James

コメントを残す