Linux read 命令

Linux 命令大全 Linux 命令大全

Linux read命令用於從標準輸入讀取數值。

read 內部命令被用來從標準輸入讀取單行數據。這個命令可以用來讀取鍵盤輸入,當使用重定向的時候,可以讀取檔中的一行數據。

語法

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

參數說明:

  • -a 後跟一個變數,該變數會被認為是個數組,然後給其賦值,默認是以空格為分割符。
  • -d 後面跟一個標誌符,其實只有其後的第一個字元有用,作為結束的標誌。
  • -p 後面跟提示資訊,即在輸入前列印提示資訊。
  • -e 在輸入的時候可以使用命令補全功能。
  • -n 後跟一個數字,定義輸入文本的長度,很實用。
  • -r 遮罩\,如果沒有該選項,則\作為一個轉義字元,有的話 \就是個正常的字元了。
  • -s 安靜模式,在輸入字元時不再螢幕上顯示,例如login時輸入密碼。
  • -t 後面跟秒數,定義輸入字元的等待時間。
  • -u 後面跟fd,從檔描述符中讀入,該檔描述符可以是exec新開啟的。

實例

1、簡單讀取

#!/bin/bash

#這裏默認會換行

echo "輸入網站名: "
#讀取從鍵盤的輸入

read website
echo "你輸入的網站名是 $website"
exit 0  #退出

測試結果為:

輸入網站名:
www.xuhuhu.com
你輸入的網站名是 www.xuhuhu.com

2、-p 參數,允許在 read 命令行中直接指定一個提示。

#!/bin/bash

read -p "輸入網站名:" website
echo "你輸入的網站名是 $website"
exit 0

測試結果為:

輸入網站名:www.xuhuhu.com
你輸入的網站名是 www.xuhuhu.com

3、-t 參數指定 read 命令等待輸入的秒數,當計時滿時,read命令返回一個非零退出狀態。

#!/bin/bash

if read -t 5 -p "輸入網站名:" website
then
    echo "你輸入的網站名是 $website"
else
    echo "\n抱歉,你輸入超時了。"
fi
exit 0

執行程式不輸入,等待 5 秒後:

輸入網站名:
抱歉,你輸入超時了

4、除了輸入時間計時,還可以使用 -n 參數設置 read 命令計數輸入的字元。當輸入的字元數目達到預定數目時,自動退出,並將輸入的數據賦值給變數。

#!/bin/bash

read -n1 -p "Do you want to continue [Y/N]?" answer
case $answer in
Y | y)
      echo "fine ,continue";;
N | n)
      echo "ok,good bye";;
*)
     echo "error choice";;

esac
exit 0

該例子使用了-n 選項,後接數值 1,指示 read 命令只要接受到一個字元就退出。只要按下一個字元進行回答,read 命令立即接受輸入並將其傳給變數,無需按回車鍵。

只接收 2 個輸入就退出:

#!/bin/bash

read -n2 -p "請隨便輸入兩個字元: " any
echo "\n您輸入的兩個字元是:$any"
exit 0

執行程式輸入兩個字元:

請隨便輸入兩個字元: 12
您輸入的兩個字元是:12

5、-s 選項能夠使 read 命令中輸入的數據不顯示在命令終端上(實際上,數據是顯示的,只是 read 命令將文本顏色設置成與背景相同的顏色)。輸入密碼常用這個選項。

#!/bin/bash

read  -s  -p "請輸入您的密碼:" pass
echo "\n您輸入的密碼是 $pass"
exit 0

執行程式輸入密碼後是不顯示的:

請輸入您的密碼:
您輸入的密碼是 zaixian

6.讀取檔

每次調用 read 命令都會讀取檔中的 "一行" 文本。當檔沒有可讀的行時,read 命令將以非零狀態退出。

通過什麼樣的方法將檔中的數據傳給 read 呢?使用 cat 命令並通過管道將結果直接傳送給包含 read 命令的 while 命令。

測試檔 test.txt 內容如下:

123
456
zaixian

測試代碼:

#!/bin/bash

count=1    # 賦值語句,不加空格
cat test.txt | while read line      # cat 命令的輸出作為read命令的輸入,read讀到>的值放在line中

do
   echo "Line $count:$line"
   count=$[ $count + 1 ]          # 注意中括弧中的空格。

done
echo "finish"
exit 0

執行結果為:

Line 1:123
Line 2:456
Line 3:zaixian
finish

使用 -e 參數,以下實例輸入字元 a 後按下 Tab 鍵就會輸出相關的檔案名(該目錄存在的):

$ read -e -p "輸入檔案名:" str
輸入檔案名:a
a.out    a.py     a.pyc    abc.txt
輸入檔案名:a

Linux 命令大全 Linux 命令大全