每天一個 Linux 命令:read 命令
1. 命令簡介
read
命令是 Shell 內建命令,用於從標準輸入或 -u 選項指定的文件描述符中讀取單行,並將讀取的單行根據 IFS 變量分割成多個字段,並將分割後的字段分別賦值給指定的變量列表。
第一個字段分配給第一個變量,第二個字段分配給第二個變量,以此類推。如果指定的變量名少於字段數量,則多出的字段連同分隔符分配給最後一個變量。
如果指定的變量多於字段數量,則多出的變量賦值爲空。如果沒有指定任何變量,則分割後的所有字段都存儲在特定變量 REPLY 中。
當然,read
讀取的內容不僅可以賦給變量,還可以賦給數組。
IFS(Internal Field Separator)變量是 Shell 內建的環境變量,用於將 read 命令讀取的單行內容分隔爲多個字段。默認取值爲空格、Tab 和換行符。
REPLY 變量也是 Shell 內建的環境變量,當 read
命令未指明接收變量時,用於接收 read
命令讀取的單行內容。
2. 命令格式
read [OPTIONS] [VARNAMES]
3. 選項說明
-a ANAME
將分割後的字段依次存儲到指定的數組中,存儲的起始位置從數組的下標 0 開始
-d DELIM
後跟一個分隔符,只有第一個字符有用,用以取代換行符作爲行的結束標誌
-e
在輸入的時候可以使用命令補全功能,使用 Tab 鍵可自動補全當前目錄下文件
-i TEXT
如果使用 readline 命令讀取行,則在開始編輯之前將文本放入編輯緩衝區
-n NCHARS
後跟一個數字,定義輸入文本的長度,而不是讀取整行
-N NCHARS
後跟一個數字,定義輸入文本的長度,而不是讀取整行。但是如果一行不足 nchars 個字符,則忽略行分隔符繼續讀取下一行
-p PROMPT
從終端讀取輸入時,在輸入前打印提示信息
-r
屏蔽反斜槓 \。如果沒有該選項,則 \ 作爲一個轉義字符,有的話 \ 就是個正常的字符了
-s
靜默模式,輸入字符不顯示到屏幕,例如 login 時輸入密碼
-t TIMEOUT
後面跟秒數,定義輸入字符的等待時間
-u FD
後面跟文件描述符 fd,從文件描述符中讀取
4. 常用示例
(1)如果沒有指定變量,read 會把傳入的值傳給 REPLY,只要調用 REPLY 就可以引用 read 讀取的內容。
read; echo "\$REPLY:$REPLY"
dablelv
$REPLY:dablelv
(2)read 從終端讀取時指定一個提示語
[root@TENCENT64 ~]# read -p"input u password:";echo "\$REPLY:$REPLY"
input u password:123456
$REPLY:123456
(3)-t 選項指定 read 命令等待輸入的秒數,當計時滿時,read 命令返回一個非零狀態碼。
#!/bin/bash
if read -t 5 -p "輸入網站名:" name
then
echo "你輸入的網站名是 $website"
else
echo "\n抱歉,你輸入超時了。"
fi
exit 0
執行程序不輸入,等待 5 秒後:
輸入網站名:
抱歉,你輸入超時了
(4)除了控制輸入時間,還可以使用 -n 選項控制輸入的字符數量。當輸入的字符數目達到預定數目時,自動退出,並將輸入的數據賦值給變量。例如只接收 2 個輸入就退出:
#!/bin/bash
read -n2 -p "請隨便輸入兩個字符: " any
echo "\n您輸入的兩個字符是:$any"
exit 0
(5)-s 選項能夠使輸入的數據不顯示在命令終端上(實際上,輸入的內容是顯示的,只是 read 命令將文本顏色設置成與背景相同的顏色)。輸入密碼常用這個選項。
#!/bin/bash
read -s -p "請輸入您的密碼:" pass
echo "\n您輸入的密碼是 $pass"
exit 0
執行程序輸入密碼後是不顯示的:
請輸入您的密碼:
您輸入的密碼是 linuxhub
(6)讀取文件。每次調用 read 命令都會讀取文件中的一行文本。當文件沒有可讀的行時,read 命令將以非零狀態碼退出。
while read var1 var2
do
echo $var1 $var2
done < file.txt
轉自:戀貓大鯉魚 blog.csdn.net/K346K346/article/details/83385774
****推薦關注「算法愛好者」,修煉編程內功
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/x0RyLrp767wtiWs02ocKcQ