はじめに

こんにちは!今回はreadコマンドについて解説します。

readは、ユーザーからの入力を受け取るコマンドです。シェルスクリプトで対話的な処理を作る時によく使います。

readコマンドとは

readは、キーボードから入力された文字を変数に格納するコマンドです。

例えば、「名前を入力してください」みたいなスクリプトを作りたい時に使います。ユーザーが入力した内容を変数に保存できるので、対話的なスクリプトが作れるんです。

基本構文

1
read [オプション] 変数名

主なオプション

オプション 説明
-p プロンプトメッセージを表示
-s 入力を画面に表示しない(パスワード入力時など)
-n 数字 指定した文字数だけ読み込む
-t 秒数 タイムアウトを設定

使用例

例1: 基本的な使い方

1
2
3
echo "名前を入力してください:"
read name
echo "こんにちは、${name}さん!"

実行結果:

1
2
3
名前を入力してください:
太郎  ← ユーザーが入力
こんにちは、太郎さん!

例2: プロンプト付きで入力

1
2
read -p "名前を入力してください: " name
echo "こんにちは、${name}さん!"

実行結果:

1
2
名前を入力してください: 太郎  ← ユーザーが入力
こんにちは、太郎さん!

-pオプションを使うと、echoなしで一行で書けます。

例3: パスワード入力(入力を隠す)

1
2
3
read -sp "パスワードを入力してください: " password
echo
echo "パスワードが設定されました"

実行結果:

1
2
パスワードを入力してください:   ← 入力しても表示されない
パスワードが設定されました

-sオプションで入力内容が画面に表示されません。

例4: 複数の変数に格納

1
2
3
read -p "名前と年齢を入力してください(スペース区切り): " name age
echo "名前: $name"
echo "年齢: $age"

実行結果:

1
2
3
名前と年齢を入力してください(スペース区切り): 太郎 25
名前: 太郎
年齢: 25

スペースで区切ると、複数の変数に分けて格納できます。

例5: タイムアウト設定

1
2
3
4
5
if read -t 5 -p "5秒以内に名前を入力してください: " name; then
    echo "こんにちは、${name}さん!"
else
    echo "タイムアウトしました"
fi

5秒以内に入力しないとタイムアウトします。

Tips・注意点

  • 空白文字の扱い: デフォルトでは、入力の前後の空白は削除されます

    1
    2
    
    read -p "入力: " var
    # "  test  " と入力しても、$varには "test" が入る
    
  • REPLYという特殊変数: 変数名を指定しないと、自動的にREPLYという変数に格納されます

    1
    2
    
    read -p "入力: "
    echo "入力内容: $REPLY"
    
  • ファイルから読み込み: リダイレクトでファイルから読み込むこともできます

    1
    2
    
    read line < file.txt
    echo $line  # ファイルの最初の行が表示される
    
  • Yes/No の確認: よく使うパターン

    1
    2
    3
    4
    5
    6
    
    read -p "続けますか? (y/n): " answer
    if [ "$answer" = "y" ]; then
        echo "続行します"
    else
        echo "中止します"
    fi
    

実践的な使い方

インタラクティブなスクリプト

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

read -p "あなたの名前: " name
read -p "好きな言語: " lang
read -p "年齢: " age

echo "=== プロフィール ==="
echo "名前: $name"
echo "好きな言語: $lang"
echo "年齢: $age"

ユーザー情報を収集するスクリプトとか、こんな感じで作れます。

確認プロンプト

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

read -p "本当に削除しますか? (yes/no): " confirm

if [ "$confirm" = "yes" ]; then
    echo "削除を実行します..."
    # rm -rf とかの危険な操作
else
    echo "キャンセルしました"
fi

危険な操作の前に確認を取るとかでよく使います。

パスワード入力

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash

read -sp "パスワードを入力: " pass1
echo
read -sp "パスワードを再入力: " pass2
echo

if [ "$pass1" = "$pass2" ]; then
    echo "パスワードが一致しました"
else
    echo "パスワードが一致しません"
fi

パスワード設定の時とかに使えます。

ループで使う

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash

while true; do
    read -p "コマンドを入力 (quitで終了): " cmd

    if [ "$cmd" = "quit" ]; then
        echo "終了します"
        break
    fi

    echo "入力されたコマンド: $cmd"
done

簡単な対話シェルみたいなのも作れます。

まとめ

今回はreadコマンドについて解説しました。

ポイント:

  • readでユーザー入力を変数に格納できる
  • -pでプロンプト表示、-sで入力を隠せる
  • スペース区切りで複数変数に分けられる
  • 対話的なスクリプトを作る時に必須

シェルスクリプトで対話的な処理を作りたい時は、このコマンドが必須です。確認プロンプトとか、設定入力とか、色々使えるので覚えておくと便利ですよ。

次回もLinuxコマンドの学習を続けていきましょう!