SHELL指令碼--read命令,shell指令碼--read

來源:互聯網
上載者:User

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註:若您覺得這篇文章還不錯請點擊下右下角的推薦,有了您的支援才能激發作者更大的寫作熱情,非常感謝!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.