在本小節中,我們將學習如何從終端和腳本中讀取(獲取)用戶輸入。
要讀取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,執行後得到以下結果:
如果不使用read命令傳遞變數,將會發生什麼?
如果我們不使用read
命令傳遞變數,則可以在顯示輸入時傳遞一個名為REPLY
的內置變數(應以$
符號為首碼)。可以參考以下程式說明:
#!/bin/bash
# using read command without any variable
echo "Enter name : "
read
echo "Name : $REPLY"
將上面腳本代碼保存到檔:read-reply.sh,然後執行,得到以下結果:
示例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,然後執行,得到以下結果:
注意:在腳本的第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,然後執行,得到以下結果: