天天看點

linux read 暫停,Linux read 指令

Linux read 指令

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.runoob.com

你輸入的網站名是 www.runoob.com

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

#!/bin/bash

read -p "輸入網站名:" website

echo "你輸入的網站名是 $website"

exit 0

測試結果為:

輸入網站名:www.runoob.com

你輸入的網站名是 www.runoob.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 指令立即接受輸入并将其傳給變量,無需按Enter鍵。

隻接收 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

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

請輸入您的密碼:

您輸入的密碼是 runoob

6.讀取檔案

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

通過什麼樣的方法将檔案中的資料傳給 read 呢?使用 cat 指令并通過管道将結果直接傳送給包含 read 指令的 while 指令。

測試檔案 test.txt 内容如下:

123

456

runoob

測試代碼:

#!/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:runoob

finish

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

$ read -e -p "輸入檔案名:" str

輸入檔案名:a

a.out a.py a.pyc abc.txt

輸入檔案名:a