1. 程式人生 > 其它 >『忘了再學』Shell基礎 — 18、接收鍵盤輸入的資料

『忘了再學』Shell基礎 — 18、接收鍵盤輸入的資料

我們之前講過位置引數變數是用來向指令碼中傳遞值的。

而我們在說明位置引數變數的時候,也說過位置引數變數的缺點,在執行指令碼的時候,是沒有給指令碼所需要引數的提示。

這樣的情況非常的不友好,可以用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"