Linux read 命令指南


介紹

當我們在使用 Linux 命令列時,我們經常需要與來自使用者或檔案的輸入進行互動。這就是“read”命令發揮作用的地方。它是一個簡單但功能強大的命令,可以以多種方式用於處理 Linux 中的輸入。透過學習如何以各種方式使用 read 命令,我們可以更熟練地使用此命令並更有效地自動化任務。

讓我們介紹 Linux read 命令的所有方法和格式。我們將從基礎開始,包括如何讀取使用者的輸入以及如何自定義輸入分隔符。然後,我們將繼續討論更高階的主題,例如從檔案和從其他命令讀取輸入。

使用 read 命令的基本方法

read 命令最基本的使用方法是從使用者那裡讀取輸入。為此,只需鍵入“read”後跟一個變數名即可。例如 -

$ read name
Somdeb
$ echo "Hello $name"

執行此程式碼時,將提示使用者輸入其姓名。一旦他們輸入了姓名,該值將儲存在變數“name”中,並且指令碼將輸出“Hello”,後跟姓名。

Hello Somdeb

使用 read 命令的高階方法

Linux 中的 read 命令具有高階選項,允許更靈活地控制如何處理輸入。讓我們探索這些高階方法 -

  • -d delim - 此選項允許我們指定輸入行的分隔符,而不是使用預設的新行字元。

  • -u fd - 預設情況下,read 命令從標準輸入 (stdin) 讀取輸入,但使用此選項,我們可以從特定的檔案描述符讀取輸入。

  • -r - 通常,read 命令將反斜槓字元 () 視為跳脫字元,但使用此選項,反斜槓將被視為普通字元。

  • -t timeout - 此選項為讀取輸入設定超時,嘗試在給定的秒數內讀取輸入。如果在收到輸入之前達到超時,則 read 命令將終止。

  • –p prompt - 在請求輸入之前顯示提示文字,增強使用者體驗。

read 命令有幾種高階方法可用於自定義其行為。其中一種方法是“-t”選項,它允許我們為 read 命令設定超時。當我們想要讀取使用者的輸入,但又不想無限期地等待他們輸入時,這很有用。

$ if read -t 10 -p "Enter your name: " name; then
   echo "Hello $name"
else
   echo "Timed out!!"
fi

在此程式碼中,“-t”選項用於為 read 命令設定 10 秒的超時。如果使用者在 10 秒內輸入了他們的姓名,則它將儲存在變數“name”中,並且指令碼將輸出“Hello”,後跟使用者的姓名。如果使用者在 10 秒內未輸入姓名,則指令碼將輸出“Timed out!!”。

Enter your name: Somdeb Nath
Hello Somdeb Nath

另一種高階方法是能夠將多個值讀入多個變數。為此,只需在“read”命令之後列出變數名,並用空格隔開即可。

$ read firstname middlename lastname
Sk. Adil Hussain
$ echo "Hello [$firstname] [$middlename] [$lastname]"

在此程式碼中,系統會提示使用者輸入他們的名字、中間名和姓氏。一旦他們輸入了這些值,它們將分別儲存在變數“firstname”、“middlename”和“lastname”中。並且指令碼將返回以下輸出 -

Hello [Sk.] [Adil] [Hussain]

使用 read 命令從檔案讀取輸入

當我們想要獲取特定資料欄位時,從檔案讀取輸入非常有用。例如,讓我們考慮一個包含腳踏車資料的檔案 (file.txt) -

bike,model,year,vin
Honda,CRF450R,2022,JH2PE1030NK200013
Kawasaki,Z400,2021,JKAZR2A10MA042809
Yamaha,YZF-R6,2020,JYARJ28E8LA000081

要讀取它,我們可以使用迴圈讀取檔案的每一行並對其進行處理。

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

在此程式碼中,“while”迴圈讀取檔案“file.txt”的每一行,並將其儲存在變數“line”中。“echo”命令然後輸出“line”的值。此迴圈將繼續,直到讀取檔案中的所有行。

使用 read 命令從檔案讀取輸入

使用 read 命令時,我們還可以從其他命令讀取輸入,這對於處理大量資料非常有用。一個常見的用例是將命令的輸出重定向到 read 命令的輸入。

以下是如何重定向 ls 命令的輸出並從根資料夾中提取檔名及其訪問許可權的示例 -

$ ls -l / | while read -r line; do
   filename=$(echo $line | awk '{print $9}')
   rights=$(echo $line | awk '{print $1}')
   echo "File: $filename, Access Rights: $rights"
done

我們使用 ls -l / 命令列出根資料夾中所有檔案的訪問許可權。輸出被傳遞到一個 while 迴圈,該迴圈使用 read 命令讀取每一行。awk 命令從每一行中提取檔名和訪問許可權,並使用 echo 命令列印它們。

File: , Access Rights: total
File: bin, Access Rights: lrwxrwxrwx
File: boot, Access Rights: drwxr-xr-x
File: cdrom, Access Rights: drwxrwxr-x
File: dev, Access Rights: drwxr-xr-x
File: etc, Access Rights: drwxr-xr-x

結論

read 命令是與 Linux 終端互動的強大工具。它可以用於讀取使用者的輸入或檔案中的輸入,並且它有幾個高階選項允許我們自定義其行為。透過掌握 read 命令,我們可以成為更有效率的 Linux 使用者。

更新於: 2023年3月29日

4K+ 閱讀量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告