天天看點

shell read用法分析_學習筆記

時間:2017.12.19

作者:李強

參考:man,info,magedu講義,萬能的internet

實驗環境:CentOS 6.9與CentOS7.4

聲明:以下英文純屬個人翻譯,英文B級,歡迎糾正,以下内容純屬個人了解,并沒有對錯,隻是參考,盜版不糾,才能有限,希望不誤人子弟為好。

讀取使用者輸入:

1、read

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

read接收的和cat一樣是标準輸入。他會将接收來自stdin或者從fd中(如果-u選項使用的話)的單獨一行,然後每行劃分成像單詞一樣的段。你指定幾個變量劃分成幾個段,以空格為分隔符,目前看是如此。然後把空格分割的段指派個定義的變量。

這裡我們指定了2個name,然後就會把輸入的"1x 2y 3z"這一行,以空格劃分成2段,前面是1x,後面是"2y 3z"。然後前面複制給x,後面指派給y

。如果隻指定了x,那麼一整行都會賦給x,如果沒有指定name,存放在REPLAY變量中

選項:

-p prompt:prompt,提示資訊,其後跟name把使用者stdin存放到name中

-t timeout :timeout,使用者一定時間不輸入,就退出程式

-s :不列印來自終端的輸入,可用于密碼輸入,但是回車後并沒有換行。

-d delim:以某個定界符來終止變量内容的讀取。

-e :

-r :禁止反斜線做為轉義符使用,就是單純的反斜線字元。

-a array :

-n nchars:

-N nchars:

4)、read -u

while read -u3 i && read -u4 j;do 

echo $i $j 

done 3<afile 4<bfile

ead -u3 i 的意思是從 3 号 fd (file descriptor,檔案描述符) 中讀一行資料到 i 變量中, 同理你明白 read -u4 j 的意思

而 3<afile 的意思是重定向 afile 到 3 号 fd 中, 同理你明白 4<bfile

是以,整個代碼的意思是,不斷從 afile 和 bfile 中分别讀取内容到i , j 中,然後用echo 列印出來。

這個循環會一直執行直到遇到 afile 或 bfile 中至少任意一個的檔案尾。 

比方說你 afile 的内容是

a

b

c

bfile 的内容是

1

2

3

4

則這段程式就會列印

a 1

b 2

c 3

本文轉自 lajifeiwomoshu 51CTO部落格,原文連結:http://blog.51cto.com/lajifeiwomoshu/2052163