SHELL指令碼--read命令,shell指令碼--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:給出提示符。例如,"-p 請輸入密碼:"-r:禁止反斜線的轉義功能。這意味著"\"會變成文本的一部分。-s:靜默模式。輸入的內容不會回顯在螢幕上。-t:給出逾時時間,在達到逾時時間時,read退出並返回錯誤。也就是說不會讀取任何內容,即使已經輸入了一部分。
使用樣本:
(1).將讀取的內容分配給陣列變數,從索引號0開始分配。
[root@xuexi ~]# read -a array_testwhat 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 $REPLYwhat is you name /
(3).限制輸入字元。
例如,輸入了5個字元後就結束。
[root@xuexi tmp]# read -n 512345[root@xuexi tmp]# echo $REPLY # 輸入12345共5個字元12345
如果輸入的字元數小於5,按下斷行符號會立即結束讀取。
[root@xuexi ~]# read -n 5123[root@xuexi ~]# echo $REPLY123
但如果使用的是"-N 5"而不是"-n 5",則嚴格限制讀滿5個字元才結束讀取。
[root@xuexi ~]# read -N 5123\n4[root@xuexi ~]# read -N 5123 # 3後的斷行符號(換行)算是一個字元4
(4).使用-p選項給出輸入提示。
[root@xuexi ~]# read -p "pls enter you name: "pls enter you name: Junmajinlong[root@xuexi ~]# echo $REPLYJunmajinlong
(5).禁止反斜線轉義功能。
[root@xuexi ~]# read -rwhat is you name \?[root@xuexi ~]# echo $REPLYwhat is you name \?
(6).不回顯輸入的字元。比如輸入密碼的時候,不回顯輸入密碼。
[root@xuexi ~]# read -s -p "please enter your password: "please enter your password:[root@xuexi ~]# echo $REPLY123456
(7).將讀取的行分割後賦值給變數。
[root@xuexi ~]# read var1 var2 var3abc def galsl djks[root@xuexi ~]# echo $var1:::$var2:::$var3abc:::def:::galsl djks
(8).給出輸入時間限制。沒完成的輸入將被丟棄,所以變數將賦值為空白(如果在執行read前,變數已被賦值,則此變數在read逾時後將被覆蓋為空白)。
[root@xuexi ~]# var=5[root@xuexi ~]# read -t 3 var1[root@xuexi ~]# echo $var
回到系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7402149.html註:若您覺得這篇文章還不錯請點擊下右下角的推薦,有了您的支援才能激發作者更大的寫作熱情,非常感謝!