如何使用 Bash read 命令?


read 命令是 Bash 指令碼中最基本命令之一。它用於讀取使用者或檔案中的輸入。在本文中,我們將探討如何有效地使用 read 命令,並提供一些示例及其輸出。

read 命令的基本用法

read 命令最基本的用法是從使用者那裡獲取輸入。下面是一個簡單的示例:

示例

echo "Please enter your name: "
read name
echo "Hello, $name"

執行此指令碼時,它會提示您輸入您的姓名。輸入姓名後,它會向您顯示一條問候語。以下是一個輸出示例:

輸出

Please enter your name: 
John
Hello, John

讀取多個輸入

read 命令還可以一次讀取多個輸入。以下是一個示例:

示例

echo "Enter your first and last name: "
read first_name last_name
echo "Hello, $first_name $last_name"

在此指令碼中,read 命令讀取兩個輸入,並將它們分別分配給 first_name 和 last_name。以下是一個輸出示例:

輸出

Enter your first and last name: 
John Doe
Hello, John Doe

在 read 命令中使用提示

您還可以將 -p 選項與 read 命令一起使用,以在讀取輸入前顯示提示。以下是一個示例:

示例

read -p "Enter your name: " name
echo "Hello, $name"

在此指令碼中,read 命令顯示提示“Enter your name:”,然後讀取輸入。以下是一個輸出示例:

輸出

Enter your name: John
Hello, John

從檔案讀取輸入

read 命令還可以用於從檔案讀取輸入。以下是一個示例:

while read line
do
   echo $line
done < file.txt

在此指令碼中,read 命令從檔案 file.txt 中讀取每一行,echo 命令列印每一行。輸出將是 file.txt 的內容。

使用超時讀取輸入

read 命令還可以與超時一起使用。如果使用者在指定時間內未提供輸入,則指令碼將繼續執行。以下是一個示例:

read -p "You have 5 seconds to enter your name: " -t 5 name
echo "Hello, $name"

在此指令碼中,如果使用者在 5 秒內未輸入姓名,則指令碼將繼續執行並列印“Hello, ”,不帶姓名。

將輸入讀取到陣列中

-a 選項允許您將輸入讀取到陣列中。以下是一個示例:

示例

echo "Enter three numbers separated by space: "
read -a numbers
echo "The numbers are: ${numbers[0]}, ${numbers[1]}, ${numbers[2]}"

在此指令碼中,read 命令讀取三個輸入並將它們分配給陣列 numbers。以下是一個輸出示例:

輸出

Enter three numbers separated by space: 
10 20 30
The numbers are: 10, 20, 30

不進行反斜槓解釋讀取輸入

-r 選項允許您在不進行反斜槓解釋的情況下讀取輸入。以下是一個示例:

示例

read -r -p "Enter a string: " str
echo "You entered: $str"

在此指令碼中,如果您輸入包含反斜槓的字串,則 read 命令將不會解釋反斜槓。以下是一個輸出示例:

輸出

Enter a string: Hello\ World
You entered: Hello\ World

如果不使用 -r 選項,則會解釋反斜槓,並且不會打印出來:

示例

read -p "Enter a string: " str
echo "You entered: $str"

輸出

Enter a string: Hello\ World
You entered: Hello World

使用分隔符讀取輸入

-d 選項允許您指定一個分隔符來終止輸入。以下是一個示例:

示例

read -d ';' -p "Enter a string (end with ;): " str
echo "You entered: $str"

在此指令碼中,read 命令將繼續讀取輸入,直到遇到分號。以下是一個輸出示例

輸出

Enter a string (end with ;): Hello World;
You entered: Hello World

靜默模式

-s 選項允許您在靜默模式下讀取輸入,這在您請求敏感資訊(如密碼)時非常有用。以下是一個示例:

示例

read -sp "Enter your password: " password
echo -e "
Your password length is: ${#password}"

在此指令碼中,read 命令讀取密碼,但不將其顯示在螢幕上。然後列印密碼的長度。以下是一個輸出示例:

輸出

Enter your password: 
Your password length is: 8

注意 - 當您輸入密碼時,實際密碼不會顯示。

逐行從檔案讀取

您還可以使用 read 命令逐行從檔案讀取並對每一行執行操作。以下是一個示例:

line_number=1
while read -r line
do
   echo "Line $line_number: $line"
   ((line_number++))
done < file.txt

在此指令碼中,read 命令從檔案 file.txt 中讀取每一行,echo 命令列印行號和行。輸出將取決於 file.txt 的內容。

使用預設值讀取輸入

-i 選項允許您指定一個預設值,如果使用者未提供輸入,則將使用該值。以下是一個示例:

示例

read -p "Enter your name: " -i "John Doe" name
echo "Hello, $name"

在此指令碼中,如果使用者未輸入姓名,則指令碼將使用“John Doe”作為預設值。以下是一個輸出示例:

輸出

Enter your name: 
Hello, John Doe

將輸入讀取到關聯陣列中

-A 選項允許您將輸入讀取到關聯陣列中。以下是一個示例:

示例

declare -A person
read -p "Enter your name and age: " -a person
echo "Hello, ${person[0]}, you are ${person[1]} years old."

在此指令碼中,read 命令讀取兩個輸入並將它們分配給關聯陣列 person。以下是一個輸出示例:

輸出

Enter your name and age: 
John 25
Hello, John, you are 25 years old.

這些示例應該可以讓您很好地理解如何在 Bash 指令碼中使用 read 命令。read 命令非常通用,可以以多種方式使用,使您的指令碼更具互動性和使用者友好性。

結論

read 命令是 Bash 指令碼中的一個通用工具。它可以用於讀取使用者或檔案中的輸入,並且它有幾個選項允許您自定義其行為。通過了解如何有效地使用 read 命令,您可以使您的 Bash 指令碼更具互動性和使用者友好性。

更新於: 2023-07-13

4K+ 閱讀量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.