如何在Linux中使用read指令

如何在Linux中使用read指令
讀取命令特徵影像

有時,在與 Linux 系統互動時,您可能需要提示使用者輸入或從檔案中讀取輸入,甚至需要設定逾時。您可以使用該read命令及其各種選項來執行這些任務和許多其他任務。

本文將read使用大量程式碼範例向您介紹命令及其選項的基礎知識。

什麼是讀指令

在 Linux 中,您可以使用該read命令捕獲使用者輸入或從標準輸入 (stdin) 讀取一行。該命令從給定的檔案描述符中讀取總位元組數並將其儲存在緩衝區中。之後,它會傳回讀取的位元組數、零或錯誤。

例如,如果數字或計數為零,則表示文件末尾。但成功後,它會傳回讀取的位元組數。如果讀取命令發現錯誤,則傳回-1。

在探索讀取命令選項之前,我們先來看看讀取命令的語法:

這裡,該options參數指定用於修改讀取命令的行為的各種標誌。此外,此name參數指定用於儲存輸入的多個變數的名稱。如果未提供名稱,則輸入將保留在$REPLYbash 變數中。

讀取命令選項

Bash read 指令有許多選項來控制使用者輸入。有些選項不需要額外的參數,而其他選項則需要。

讓我們探討一下可以與 read 指令一起使用的一些選項:

選項 描述
-a <數組> 它將輸入存儲為數組而不是單獨的變數。
-s 靜默運行,這意味著輸入不會顯示在終端機上
-這是 啟用 readline 庫支持,允許讀取輸入行
-i <前綴> 提供使用 readline 時出現在提示符號處的初始輸入值
-p <提示> 在讀取輸入之前顯示指定的提示
-u <文件描述符> 從指定的檔案描述符而不是標準輸入(stdin)讀取
-d <分隔符號> 允許您指定輸入行分隔符號而不是預設的換行符
-t <時間> 設定輸入超時時間;如果在此時間內未收到輸入,則讀取返回失敗
-r 設定後,反斜線不被視為轉義字符
-n <數字> 只讀取指定數量的字符

鍵入以下命令以輸出讀取命令幫助選單:

如何使用讀取命令讀取輸入

使用 read 命令的最簡單方法是不使用任何參數或選項。當您單獨執行讀取命令時,它會要求您提供要讀取的輸入。提供輸入後,它將退出並將其儲存在名為 的預設變數中REPLY

我們以此為例:

使用讀取命令捕獲用戶的輸入

現在,提供輸入後,讓我們使用 echo 命令顯示它:

使用 echo 指令顯示 REPLY 變數的輸出

在讀取輸入值時,您也可以將其儲存在任何其他特定變數中。例如,要將結果儲存到變數中,請鍵入命令read,後面接著變數名稱:

讀取使用者輸入值並儲存到特定變數中

現在,要顯示結果,您需要使用echo帶有儲存值的變數的命令:

使用 echo 指令顯示變數擷取值

讀取多個值

沒有直接的方法可以使用該read命令讀取多個值。但是,您可以將單一輸入句子拆分為多個單字並將它們儲存在不同的變數中。

讓我們考慮以下範例:

讀取多個值並將其儲存到多個變量

在這裡,您將句子的第一個單字儲存在第一個變數中,第二個單字儲存在第二個變數中,所有剩餘單字儲存在最後一個提供的變數中。

讓我們使用以下命令返回輸出:

使用 echo 指令顯示多個值

從檔案中讀取

雖然 read 主要用於使用者輸入,但您也可以使用它從檔案中讀取行。為此,只需使用while循環、echo命令和read命令後跟特定的變數名稱:

使用 read 指令從檔案中讀取

在這裡,while循環讀取“samplefile.txt”的每一行並將其記錄在變數 中line。讀取文件的所有行後,該echo命令顯示該行的值。

循環讀取輸入

您還可以透過使用帶有 while 循環的讀取來重複捕獲用戶輸入。當您想要收集多個輸入或繼續直到滿足特定條件時,這非常有用。

例如,讓我們讀取多個輸入並將它們顯示在終端上:

連續循環讀取使用者輸入值

此外,循環將繼續,直到收到文件結束 (EOF) 訊號(通常透過按Ctrl+ D)。

如何使用讀取命令提示輸入

您也可以建立在使用者輸入之前顯示的互動式提示。您可以透過使用該-p選項和 read 命令來完成此操作。

讓我們顯示一個自訂提示並捕獲輸入:

在讀取使用者輸入之前建立提示

限制使用者閱讀時的輸入

想要控制使用者可以輸入哪些內容?使用-n帶有 read 的選項來指定所需的字元長度。例如,如果要擷取使用者輸入的前 4 個字符,請使用以下命令:

根據指定的字元值讀取輸入

執行上述命令後,它只允許您輸入九個字元。在閱讀時限制使用者輸入將消除對分隔符號的需要,並且也不會將輸入分割成單字。

使用 IFS 分隔輸出字段

您可以將內部欄位分隔符號 (IFS) 變數與 read 命令一起使用,以確定如何將輸入拆分為單獨的欄位。預設情況下,IFS 使用空白字元(製表符、換行符和空格)作為欄位分隔符號。但是,您可以自訂 IFS 以滿足您的需求。

例如,您可以指定冒號 (:) 值作為分隔符號:

根據給定的分隔符號值讀取和分割值

使用 IFS 變量,您可以捕獲使用者的多行輸入,並根據分隔符號值將它們分開。

設定讀取超時

您也可以使用該選項來配置讀取命令的逾時-t。如果您想確保腳本不會長時間依賴使用者輸入,這非常有用。

讓我們使用以下選項設定 10 秒逾時-t

在給定時間內讀取輸入值

如果使用者在 10 秒內未鍵入任何內容,腳本將繼續執行。

如何隱藏使用者輸入

有時,您可能希望隱藏使用者的輸入,例如在輸入密碼等敏感資訊時。您可以使用-sread 命令的選項來實現此目的:

在 read 指令中使用 -s 選項來隱藏訊息

將密碼儲存在指定變數中後,您可以使用以下echo命令在終端機中顯示它:

使用 -e 選項和 echo 命令顯示捕獲的密碼

這裡,該-e標誌允許解釋轉義序列,並且\n轉義序列在輸出之前添加一個新行。

包起來

當您閱讀本文並完成範例後,您將熟悉在 Linux 終端機中使用 read 命令。然而,還有幾個命令需要探索。繼續閱讀以了解新手的基本命令。

圖片來源:Gabriel Heinzer,來自 Unsplash。所有螢幕截圖均由 Haroon Javed 提供。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *