English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Linux read コマンド

Linux コマンド全書

Linuxのreadコマンドは標準入力から数値を読み取ります。

read コマンドは標準入力から一行のデータを読み取ります。このコマンドはキーボードからの入力を読み取るために使用できます。リダイレクトを使用すると、ファイルから一行のデータを読み取ることができます。

構文

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

パラメータ説明:

  • -a 次に変数を続けます。その変数は配列として認識され、その値が割り当てられます。デフォルトではスペースで区切られます。
  • -d 次にシンボルを続けます。実際にはその後の最初の文字のみが使用されますが、終了シンボルとして使用されます。
  • -p 次に提示情報を続けます。入力前に提示情報を表示します。
  • -e 入力中にコマンド補完機能を使用できます。
  • -n 数字を続けます。入力テキストの長さを定義し、非常に実用的です。
  • -r シグネチャを非表示にします。このオプションが無い場合、シグネチャはエスケープシンボルとして使用され、存在する場合は通常の文字として扱われます。
  • -sはサイレントモードで、入力文字を画面に表示しない(例えば、login時にパスワードを入力する場合など)
  • -tが秒数の後ろに続くと、入力文字の待機時間を定義します。
  • -uがfdの後ろに続くと、ファイルディスクリプタから読み取ります。このファイルディスクリプタはexecで新しいものを開くことができます。

オンラインサンプル

1、簡単な読み取り

#!/bin/bash
#ここではデフォルトで改行します  
echo "ウェブサイト名を入力してください: "  
#キーボードからの入力を読み取ります  
read website  
echo "あなたが入力したウェブサイト名は $website"  
exit 0  #退出

テスト結果は:

ウェブサイト名を入力してください: 
ja.oldtoolbag.com
あなたが入力したウェブサイト名は ja.oldtoolbag.com

2、-pパラメータは、readコマンドの行に直接提示を指定することができます。

#!/bin/bash
read -p "ウェブサイト名を入力してください: " website
echo "あなたが入力したウェブサイト名は $website" 
exit 0

テスト結果は:

ウェブサイト名を入力してください:ja.oldtoolbag.com
あなたが入力したウェブサイト名は ja.oldtoolbag.com

3、-tパラメータはreadコマンドが入力を待つ秒数を指定します。時間が経過すると、readコマンドは非ゼロの終了ステータスを返します。

#!/bin/bash
if read -t 5 -p "ウェブサイト名を入力してください: " website
then
    echo "あなたが入力したウェブサイト名は $website"
else
    echo "\n申し訳ありませんが、入力がタイムアウトしました。"
fi
exit 0

プログラムを実行せずに待つ 5 秒後:

ウェブサイト名を入力してください:
申し訳ありませんが、入力がタイムアウトしました

4、入力時間の計測に加えて、以下を使用することもできます -n パラメータ設定 read コマンドは入力された文字の数を数えます。入力された文字の数が設定された数に達すると、自動的に終了し、入力されたデータを変数に割り当てます。

#!/bin/bash
read -n1 -p "続行したいですか [Y/N]?" answer
case $answer in
Y | y)
      echo "fine ,continue";;
N | n)
      echo "ok,good bye";;
*)
     echo "error choice";;
esac
exit 0

この例では以下を使用しました-nオプション、数値を続ける 1、readコマンドが一つの文字を受け入れたら終了します。回答を一つの文字で入力すると、readコマンドが即座に入力を受け入れ、変数に渡します。エンターキーを押す必要はありません。

受け入れられるのは 2 個の入力があれば終了:

#!/bin/bash
read -n2 -p "なんでもいいので二つの文字を入力してください: " any
echo "\nあなたが入力した二つの文字は:$any"
exit 0

プログラムを実行するときに二つの文字を入力してください:

なんでもいいので二つの文字を入力してください: 12
あなたが入力した二つの文字は:12

5、-s オプションは以下のことを可能にします read コマンドで入力されたデータはコマンドターミナルに表示されません(実際には表示されていますが、 read コマンドはテキストの色を背景色と同じに設定します)。パスワードの入力にはこのオプションがよく使われます。

#!/bin/bash
read  -s  -p "あなたのパスワードを入力してください: " pass
echo "\nあなたが入力したパスワードは $pass"
exit 0

プログラムを実行し、パスワードを入力した後は表示されません:

あなたのパスワードを入力してください:
あなたのパスワードは w です3codebox

6.ファイルを読み取る

read コマンドが呼び出されるたびに、ファイル内の「一行」のテキストを読み取ります。ファイルに読み取れる行がない場合、read コマンドは非ゼロのステータスで終了します。

ファイル内のデータをどのように read コマンドに渡すか?cat コマンドを使用して、結果をパイプで直接 read コマンドを含む while コマンドに送信します。

テストファイル test.txt の内容は以下の通りです:

123
456
w3codebox

テストコード:

#!/bin/bash
count=1    # 設定命令、スペースを入力しない
cat test.txt | while read line      # cat コマンドの出力をreadコマンドの入力として、readが>の値を読み込む
do
   echo "行 $count:$line"
   count=$[ $count + 1 ]          # 注意、中括号内のスペース。
done
echo "finish"
exit 0

実行結果は:

行 1:123
行 2:456
行 3:w3codebox
finish

を使用して -e 引数を入力します、以下の例の入力文字 a の後に押して Tab キーを押すと、関連するファイル名が表示されます(このディレクトリに存在する場合):

$ read -e -p "ファイル名を入力してください:" str 
ファイル名を入力してください:a
a.out    a.py     a.pyc    abc.txt  
ファイル名を入力してください:a

Linux コマンド全書