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 使用者。