linux下read命令詳解


要與Linux交互,腳本獲取鍵盤輸入的結果是必不可少的,read可以讀取鍵盤輸入的字符。

read [-rs] [-a ARRAY] [-d delim] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [var_name1 var_name2 ...]

read命令用於從標准輸入中讀取輸入單行,並將讀取的單行根據IFS變量分裂成多個字段,並將分割后的字段分別賦值給指定的變量列表var_name。第一個字段分配給第一個變量var_name1,第二個字段分配給第二個變量var_name2,依次到結束。如果指定的變量名少於字段數量,則多出的字段數量也同樣分配給最后一個var_name,如果指定的變量命令多於字段數量,則多出的變量賦值為空。

如果沒有指定任何var_name,則分割后的所有字段都存儲在特定變量REPLY中。

選項說明:
-a:將分裂后的字段依次存儲到指定的數組中,存儲的起始位置從數組的index=0開始。 -d:指定讀取行的結束符號。默認結束符號為換行符。 -n:限制讀取N個字符就自動結束讀取,如果沒有讀滿N個字符就按下回車或遇到換行符,則也會結束讀取。 -N:嚴格要求讀滿N個字符才自動結束讀取,即使中途按下了回車或遇到了換行符也不結束。其中換行符或回車算一個字符。 -p:給出提示符。默認不支持"\n"換行,要換行需要特殊處理,見下文示例。例如,"-p 請輸入密碼:" -r:禁止反斜線的轉義功能。這意味着"\"會變成文本的一部分。 -s:靜默模式。輸入的內容不會回顯在屏幕上。 -t:給出超時時間,在達到超時時間時,read退出並返回錯誤。也就是說不會讀取任何內容,即使已經輸入了一部分。

使用示例:

(1).將讀取的內容分配給數組變量,從索引號0開始分配。

[root@xuexi ~]# read -a array_test
what is you name? [root@xuexi ~]# echo ${array_test[@]} what is you name? [root@xuexi ~]# echo ${array_test[0]} what

(2).指定讀取行的結束符號,而不再使用換行符。

[root@xuexi ~]# read -d '/' what is you name \// # 輸入完尾部的"/",自動結束read

由於沒有指定var_name,所以通過$REPLY變量查看read讀取的行。

[root@xuexi ~]# echo $REPLY what is you name /

(3).限制輸入字符。

例如,輸入了5個字符后就結束。

[root@xuexi tmp]# read -n 5
12345 [root@xuexi tmp]# echo $REPLY # 輸入12345共5個字符 12345

如果輸入的字符數小於5,按下回車會立即結束讀取。

[root@xuexi ~]# read -n 5
123 [root@xuexi ~]# echo $REPLY 123

但如果使用的是"-N 5"而不是"-n 5",則嚴格限制讀滿5個字符才結束讀取。

[root@xuexi ~]# read -N 5
123\n4 [root@xuexi ~]# read -N 5 123 # 3后的回車(換行)算是一個字符 4

(4).使用-p選項給出輸入提示。

[root@xuexi ~]# read -p "pls enter you name: " pls enter you name: Junmajinlong [root@xuexi ~]# echo $REPLY Junmajinlong

"-p"選項默認不帶換行功能,且也不支持"\n"換行。但通過$'string'的方式特殊處理,就可以實現換行的功能。例如:

[root@node2 ~]# read -p $'Enter your name: \n' Enter your name: JunMaJinLong

關於$'String'和$"String"的作用,見http://www.cnblogs.com/f-ck-need-u/p/8454364.html

(5).禁止反斜線轉義功能。

[root@xuexi ~]# read -r
what is you name \? [root@xuexi ~]# echo $REPLY what is you name \?

(6).不回顯輸入的字符。比如輸入密碼的時候,不回顯輸入密碼。

[root@xuexi ~]# read -s -p "please enter your password: " please enter your password: [root@xuexi ~]# echo $REPLY 123456

(7).將讀取的行分割后賦值給變量。

[root@xuexi ~]# read var1 var2 var3
abc def    galsl djks

[root@xuexi ~]# echo $var1:::$var2:::$var3 abc:::def:::galsl djks

(8).給出輸入時間限制。沒完成的輸入將被丟棄,所以變量將賦值為空(如果在執行read前,變量已被賦值,則此變量在read超時后將被覆蓋為空)。

[root@xuexi ~]# var=5 [root@xuexi ~]# read -t 3 var 1 [root@xuexi ~]# echo $var


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM