Shell 讀取用戶輸入
14.2 讀取用戶輸入
14.2.1 變量
上一章我們談到如何定義或取消變量,變量可被設置為當前shell的局部變量,或是環境變量。如果您的shell腳本不需要調用其他腳本,其中的變量通常設置為腳本內的局部變量(參見第13.10節“變量”)。
要獲取變量的值,在美元符後跟變量名即可。shell會對雙引號內的美元符後的變量執行變量擴展,單引號中的美元符則不會被執行變量擴展。
範例14-3
1 name="John Doe" or declare name="John Doe" # local variable
2 export NAME="John Doe" # global variable
3 echo "$name" "$NAME" # extract the value
14.2.2 read命令
read命令是一個內置命令,用於從終端或文件讀取輸入(參見表14-1)。read命令讀取一個輸入行,直至遇到換行符。行尾的換行符在讀入時將被轉換成一個空字符。如果read命令後未跟變量名,讀入的行將被賦給內置變量REPLY。也可以用read命令來中斷程序的運行,直至用戶輸入一個回車鍵。要知道如何有效地使用read命令從文件讀取輸入行,請參見14.6節的“循環控制命令”。如果帶-r選項,read命令將忽略反斜杠/換行符對,而把反斜杠作為行的一部分。read命令有4個控制選項:-a,-e,-p,-r②。
表14-1 read命令
格 式 |
含 義 |
read answer |
從標準輸入讀取一行並賦值給變量answer |
read first last |
從標準輸入讀取一行,直至遇到第一個空白符或換行符。把用戶鍵入的第一個詞存到變量first中,把該行的剩余部分保存到變量last中 |
read |
標準輸入讀取一行並賦值給內置變量REPLY |
read –a arrayname |
讀入一組詞,依次賦值給數組arrayname③ |
(續表)
格 式 |
含 義 |
read -e |
在交互式shell命令行中啟用編輯器。例如,如果編輯器是vi,則可以在輸入行時使用vi命令③ |
read –p prompt |
打印提示符,等待輸入,並將輸入賦值給REPLY變量③ |
read –r line |
允許輸入包含反斜杠③ |
範例14-4
(腳本)
#!/bin/bash
# Scriptname: nosy
echo -e "Are you happy? \c"
1 read answer
echo "$answer is the right response."
echo -e "What is your full name? \c"
2 read first middle last
echo "Hello $first"
echo –n "Where do you work? "
3 read
4 echo I guess $REPLY keeps you busy!
-------------------------------------------------------④
5 read -p "Enter your job title: "
6 echo "I thought you might be an $REPLY."
7 echo -n "Who are your best friends? "
8 read -a friends
9 echo "Say hi to ${friends[2]}."
-------------------------------------------------------
(輸出)
$ nosy
Are you happy? Yes
1 Yes is the right response.
2 What is your full name? Jon Jake Jones
Hello Jon
3 Where do you work? the Chico Nut Factory
4 I guess the Chico Nut Factory keeps you busy!
5 Enter your job title: Accountant
6 I thought you might be an Accountant.
7,8 Who are your best friends? Melvin Tim Ernesto
9 Say hi to Ernesto.
說明
1. read命令接收一行用戶輸入,將其值賦給變量answer。
2. read命令從用戶處接收輸入,將輸入的第一個詞賦給變量first,將第二個詞賦給變量middle,然後將直到行尾的所有剩余單詞都賦給變量last。
3. 從標準輸入讀取一行,賦值給內置變量REPLY。
4. 顯示變量REPLY的值。
5. 帶-p選項的read命令,顯示提示“Enter your job title:”,把輸入行賦值給特定內置變量REPLY。
6. 在字符串中顯示變量REPLY的值。
7. 請求用戶輸入。
8. 帶-a選項的read命令將輸入當作一組詞組成的數組,數組名為friends,讀入數組的元素是Melvin、Tim和Ernesto。
9. 顯示friends數組的第3個元素。數組下標從0開始。
Shell 讀取用戶輸入