Bash讀取使用者輸入


在本小節中,我們將學習如何從終端和指令碼中讀取(獲取)使用者輸入。

要讀取Bash使用者輸入,需要使用內建的Bash命令read。它用於從使用者處獲取輸入並分配給變數。它僅從Bash shell中讀取一行。以下是read命令的語法。

read <variable_name>

以下是從Bash指令碼讀取使用者輸入的範例:

範例1:

在此範例中,使用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,執行後得到以下結果:

Bash讀取用戶輸入

如果不使用read命令傳遞變數,將會發生什麼?

如果我們不使用read命令傳遞變數,則可以在顯示輸入時傳遞一個名為REPLY的內建變數(應以$符號為字首)。可以參考以下程式說明:

#!/bin/bash  
# using read command without any variable  
echo "Enter name : "  
read  
echo "Name : $REPLY"

將上面指令碼程式碼儲存到檔案:read-reply.sh,然後執行,得到以下結果:
REPLY內置變量

範例2:

在此範例中,使用-p PROMPT命令列選項在同一行上輸入,如下所示:

read -p PROMPT <variable_name>

範例程式:

#!/bin/bash  

read -p "username:" user_var  
echo "The username is: " $user_var

將上面指令碼程式碼儲存到檔案:read-prompt.sh,然後執行,得到以下結果:

同一行上輸入

範例3:

此範例將輸入保持在靜默模式,這樣命令列上的使用者輸入都將對其他使用者隱藏。
因此,通常使用命令列選項(-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,然後執行,得到以下結果:

Bash讀取密碼輸入

注意:在指令碼的第5行,echo命令輸出了空行,因為如果不留空,則它將在同一行上輸出密碼和使用者名。

因此,通過新增echo命令空白行來編寫指令碼。

範例4

此範例是使用陣列輸入多個輸入。因此,使用-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,然後執行,得到以下結果: