1. 程式人生 > >Linux命令(46)——read命令

Linux命令(46)——read命令

1.命令簡介

read命令是Shell內建命令,用於從標準輸入或-u選項指定的檔案描述符中讀取單行,並將讀取的單行根據IFS變數分割成多個欄位,並將分割後的欄位分別賦值給指定的變數列表var_name。第一個欄位分配給第一個變數var_name1,第二個欄位分配給第二個變數var_name2,依次到結束。如果指定的變數名少於欄位數量,則多出的欄位連同分隔符分配給最後一個var_name,如果指定的變數命令多於欄位數量,則多出的變數賦值為空。如果沒有指定任何var_name,則分割後的所有欄位都儲存在特定變數REPLY中。當然,其不僅可以賦值變數,還可以賦值陣列。

IFS(Internal Field Separator)變數是Shell內建的環境變數,用於read命令將讀取的單行分隔為多個欄位。預設取值為。

REPLY變數也是Shell內建的環境變數,當read命令未指明接收變數時,用於接收read命令讀取的單行內容。

2.命令格式

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

3.選項說明

-a [aname]:將分裂後的欄位依次儲存到指定的陣列中,儲存的起始位置從陣列的下標0開始
-d [delim]:後跟一個標誌符,只有第一個字元有用,用以取代換行符作為行的結束標誌
-e:在輸入的時候可以使用命令補全功能,使用Tab鍵可自動不全當前目錄下檔案
-i [
text]:If readline is being used to read the line, text is placed into the editing buffer before editing begins -n [nchars]:後跟一個數字,定義輸入文字的長度,而不是讀取整行 -N [nchars]:後跟一個數字,定義輸入文字的長度,而不是讀取整行。但是如果一行不足nchars個字元,則忽略行分隔符繼續讀取下一行 -p [prompt]:從終端讀取輸入時,在輸入前列印提示資訊 -r:遮蔽反斜槓\,如果沒有該選項,則\作為一個轉義字元,有的話\就是個正常的字元了 -s:安靜模式,在輸入字元時不再螢幕上顯示,例如login時輸入密碼 -t [
timeout]:後面跟秒數,定義輸入字元的等待時間 -u [fd]:後面跟檔案描述符fd,從檔案描述符中讀取

4.常用示例

(1)如果沒有指定變數,read會把傳入的值傳給REPLY,調REPLY,只要呼叫REPLY就可以引用。

[[email protected] ~]# read;echo "\$REPLY:$REPLY"
dablelv
$REPLY:dablelv

(2)read從終端讀取時指定一個提示語

[[email protected]4 ~]# read -p"input u password:";echo "\$REPLY:$REPLY"
input u password:123456
$REPLY:123456

(3)-t引數指定 read 命令等待輸入的秒數,當計時滿時,read命令返回一個非零退出狀態碼。

#!/bin/bash

if read -t 5 -p "輸入網站名:" name
then
    echo "你輸入的網站名是 $website"
else
    echo "\n抱歉,你輸入超時了。"
fi
exit 0

執行程式不輸入,等待5秒後:

輸入網站名:
抱歉,你輸入超時了

(4)除了控制輸入時間,還可以使用-n選項控制輸入的字元數量。當輸入的字元數目達到預定數目時,自動退出,並將輸入的資料賦值給變數。例如只接收2個輸入就退出:

#!/bin/bash

read -n2 -p "請隨便輸入兩個字元: " any
echo "\n您輸入的兩個字元是:$any"
exit 0

(5)-s選項能夠使輸入的資料不顯示在命令終端上(實際上,輸入的內容是顯示的,只是read命令將文字顏色設定成與背景相同的顏色)。輸入密碼常用這個選項。

#!/bin/bash

read  -s  -p "請輸入您的密碼:" pass
echo "\n您輸入的密碼是 $pass"
exit 0

執行程式輸入密碼後是不顯示的:

請輸入您的密碼:
您輸入的密碼是 runoob

(6)讀取檔案
每次呼叫 read 命令都會讀取檔案中的 “一行” 文字。當檔案沒有可讀的行時,read 命令將以非零狀態退出。

while read var1 var2
do
	echo $var1 $var2
done < file.txt

參考文獻