『忘了再學』Shell基礎 — 18、接收鍵盤輸入的資料
阿新 • • 發佈:2022-05-25
我們之前講過位置引數變數是用來向指令碼中傳遞值的。
而我們在說明位置引數變數的時候,也說過位置引數變數的缺點,在執行指令碼的時候,是沒有給指令碼所需要引數的提示。
這樣的情況非常的不友好,可以用read
命令來解決,read
命令是用來接收鍵盤輸入的命令,並提示相關輸入說明。
read
命令格式如下:
[root@localhost ~]# read [選項] [變數名] 選項: -p:“提示資訊”:在等待read輸入時,輸出提示資訊。 -t:秒數:read命令會一直等待使用者輸入,使用此選項可以指定等待時間。 -n:字元數:read命令只接受指定的字元數,就會執行。 -s:隱藏輸入的資料,適用於機密資訊的輸入。 變數名: 變數名可以自定義,如果不指定變數名,會把輸入儲存入預設變數REPLY。 如果只提供了一個變數名,則整個輸入行賦予該變數。 如果提供了一個以上的變數名,則輸入行分為若干字,一個接一個地賦予各個變數,而命令列上的最後一個變數取得剩餘的所有字。
示例:
# 定義一個shell指令碼count.sh,計算兩個數的和。 [root@Lyl tmp]# vim count.sh # 指令碼內容如下: #!/bin/bash # read -t 30 是等待30秒,然後繼續執行。 read -t 30 -p "please input a num1:" num1 read -t 30 -p "please input a num2:" num2 sum=$(( $num1 + $num2 )) echo $sum # 執行該指令碼 [root@Lyl tmp]# chmod 755 count.sh [root@Lyl tmp]# ./count.sh # 執行結果如下圖:
賦值流程,如下圖:
綜合練習:
# 定義一個shell指令碼read.sh。 [root@Lyl tmp]# vim read.sh # 指令碼內容如下: #!/bin/bash # 例1 # 提示“請輸入姓名”並等待30秒,把使用者的輸入儲存入變數name中 read -t 30 -p "Please input your name:" name # 檢視變數“$name”中是否儲存了你輸入的name echo "Name is $name" # 例2 # 提示“請輸入年齡”並等待30秒,把使用者的輸入儲存入變數age中。 # 年齡是隱私,所以我們用“-s”選項隱藏輸入。 read -s -t 30 -p "Please enter your age:" age # 調整輸出格式,換行。 echo -e "\n" # 檢視上邊輸入的年齡。 echo "Age is $age" # 例3 # 提示“請選擇性別”並等待30秒,把使用者的輸入儲存入變數gender。 # 使用“-n 1”選項,表示只接收一個輸入字元就會執行(都不用輸入回車,自動就結束輸入了。) # 如下的提示:gender[M/F] read -n 1 -t 30 -p "Please select your gender[M/F]:" gender # 調整輸出格式,換行。 echo -e "\n" # 檢視上邊輸入的性別。 echo "Sex is $gender"