在本小節中,我們將學習如何從終端和指令碼中讀取(獲取)使用者輸入。
要讀取Bash使用者輸入,需要使用內建的Bash命令read
。它用於從使用者處獲取輸入並分配給變數。它僅從Bash shell中讀取一行。以下是read
命令的語法。
read <variable_name>
以下是從Bash指令碼讀取使用者輸入的範例:
在此範例中,使用read
命令從Bash指令碼中讀取了單個變數和多個變數。
#!/bin/bash
# Read the user input
echo "Enter the your name: "
read user_name
echo "Your name is $user_name"
echo
echo "Enter your age, phone and email: "
read age phone email
echo "your age is:$age, phone is:$phone, email: $email "
將上面範例程式碼儲存到檔案:read-input1.sh,執行後得到以下結果:
如果不使用read命令傳遞變數,將會發生什麼?
如果我們不使用read
命令傳遞變數,則可以在顯示輸入時傳遞一個名為REPLY
的內建變數(應以$
符號為字首)。可以參考以下程式說明:
#!/bin/bash
# using read command without any variable
echo "Enter name : "
read
echo "Name : $REPLY"
將上面指令碼程式碼儲存到檔案:read-reply.sh,然後執行,得到以下結果:
在此範例中,使用-p PROMPT
命令列選項在同一行上輸入,如下所示:
read -p PROMPT <variable_name>
範例程式:
#!/bin/bash
read -p "username:" user_var
echo "The username is: " $user_var
將上面指令碼程式碼儲存到檔案:read-prompt.sh,然後執行,得到以下結果:
此範例將輸入保持在靜默模式,這樣命令列上的使用者輸入都將對其他使用者隱藏。
因此,通常使用命令列選項(-s
,-p
)來傳遞使用者名並隱藏密碼(靜默模式),如下所示:
read -sp PROMPT <variable_name>
其中-s
指示使用者將輸入保持在靜默模式,-p
指示使用者在新的命令提示字元下輸入。
範例程式碼:
#!/bin/bash
read -p "username : " user_var
read -sp "password : " pass_var
echo
echo "username : " $user_var
echo "password : " $pass_var
將上面指令碼程式碼儲存到檔案:read-sprompt.sh,然後執行,得到以下結果:
注意:在指令碼的第5行,echo命令輸出了空行,因為如果不留空,則它將在同一行上輸出密碼和使用者名。
因此,通過新增echo命令空白行來編寫指令碼。
此範例是使用陣列輸入多個輸入。因此,使用-a
命令列選項,如下所示:
read -a <variable_name>
其中-a
指示指令碼讀取陣列,而variable_name
是參照的陣列變數名稱。
範例程式
#!/bin/bash
# Reading multiple inputs using an array
echo "Enter names : "
read -a names
echo "The entered names are : ${names[0]}, ${names[1]}."
將上面指令碼程式碼儲存到檔案:read-array.sh,然後執行,得到以下結果: