1. 程式人生 > >Shell 讀取用戶輸入

Shell 讀取用戶輸入

ble 轉換成 repl 需要 內置變量 value 當前 循環 rac

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 讀取用戶輸入