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選項使用的話)的單獨一行,然後每行劃分成像單詞一樣的段。你指定幾個變量劃分成幾個段,以空格爲分隔符,目前看是如此。然後把空格分割的段賦值個定義的變量。

[root@centos6 ~]#read x  y 
1x 2y 3z
[root@centos6 ~]#echo $x
1x
[root@centos6 ~]#echo $y
2y 3z
[root@centos6 ~]#

這裏我們指定了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

1)、test read
[lq@centos7 ~]$. 5.sh <<eof
> first lne
> second line
> three line  
> last line
> eof
word:first lne
[lq@centos7 ~]$cat 5.sh
#!/bin/bash
#test read word  split
read  word
echo word:$word

如上所示:第一行的內容給了第一個變量word 後面沒有指定name,就沒了。

2)、#test read  -d  
[lq@centos7 ~]$. 3.sh <<eof
> 123,456
> eof
pwd1:123
pwd2:
[lq@centos7 ~]$cat 3.sh
#!/bin/bash
#test read  -d 
read -d "," -p "輸入密碼:" pwd1 pwd2
echo -e "pwd1:$pwd1\npwd2:$pwd2"

3)、#test read -r
[lq@centos7 ~]$vi 3.sh
#!/bin/bash
read  -rp "輸入密碼:" pwd1
echo  "pwd1:$pwd1"
[lq@centos7 ~]$. 3.sh
輸入密碼:1\n2
pwd1:1\n2
[lq@centos7 ~]$vi 3.sh
#!/bin/bash
#test read -r
#read  -rp "輸入密碼:" pwd1
read  -p "輸入密碼:" pwd1
echo  "pwd1:$pwd1"
[lq@centos7 ~]$. 3.sh
輸入密碼:1\n2
pwd1:1n2           

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章