Linux read 命令
inux read命令用于從標(biāo)準(zhǔn)輸入讀取數(shù)值店诗。
read 內(nèi)部命令被用來(lái)從標(biāo)準(zhǔn)輸入讀取單行數(shù)據(jù)独旷。這個(gè)命令可以用來(lái)讀取鍵盤輸入,當(dāng)使用重定向的時(shí)候岔冀,可以讀取文件中的一行數(shù)據(jù)个榕。
語(yǔ)法
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
參數(shù)說(shuō)明:
-a 后跟一個(gè)變量篡石,該變量會(huì)被認(rèn)為是個(gè)數(shù)組,然后給其賦值西采,默認(rèn)是以空格為分割符凰萨。
-d 后面跟一個(gè)標(biāo)志符,其實(shí)只有其后的第一個(gè)字符有用械馆,作為結(jié)束的標(biāo)志胖眷。
-p 后面跟提示信息,即在輸入前打印提示信息霹崎。
-e 在輸入的時(shí)候可以時(shí)候命令補(bǔ)全功能珊搀。
-n 后跟一個(gè)數(shù)字,定義輸入文本的長(zhǎng)度尾菇,很實(shí)用食棕。
-r 屏蔽\,如果沒(méi)有該選項(xiàng)错沽,則\作為一個(gè)轉(zhuǎn)義字符簿晓,有的話 \就是個(gè)正常的字符了。
-s 安靜模式千埃,在輸入字符時(shí)不再屏幕上顯示憔儿,例如login時(shí)輸入密碼。
-t 后面跟秒數(shù)放可,定義輸入字符的等待時(shí)間谒臼。
-u 后面跟fd,從文件描述符中讀入耀里,該文件描述符可以是exec新開(kāi)啟的蜈缤。
實(shí)例
1、簡(jiǎn)單讀取
#!/bin/bash
#這里默認(rèn)會(huì)換行
echo "輸入網(wǎng)站名: "
#讀取從鍵盤的輸入
read website
echo "你輸入的網(wǎng)站名是 $website"
exit 0 #退出
測(cè)試結(jié)果為:
輸入網(wǎng)站名:
www.runoob.com
你輸入的網(wǎng)站名是 www.runoob.com
2冯挎、-p
參數(shù)底哥,允許在 read 命令行中直接指定一個(gè)提示
。
#!/bin/bash
read -p "輸入網(wǎng)站名:" website
echo "你輸入的網(wǎng)站名是 $website"
exit 0
測(cè)試結(jié)果為:
你輸入的網(wǎng)站名是 www.runoob.com
3、-t
參數(shù)指定read 命令等待輸入的秒數(shù)
趾徽,當(dāng)計(jì)時(shí)滿時(shí)续滋,read命令返回一個(gè)非零退出狀態(tài)
。
#!/bin/bash
if read -t 5 -p "輸入網(wǎng)站名:" name
then
echo "你輸入的網(wǎng)站名是 $website"
else
echo "\n抱歉孵奶,你輸入超時(shí)了疲酌。"
fi
exit 0
執(zhí)行程序不輸入,等待 5 秒后:
輸入網(wǎng)站名:
抱歉了袁,你輸入超時(shí)了
4朗恳、除了輸入時(shí)間計(jì)時(shí),還可以使用 -n
參數(shù)設(shè)置 read 命令計(jì)數(shù)輸入的字符
载绿。當(dāng)輸入的字符數(shù)目達(dá)到預(yù)定數(shù)目時(shí)僻肖,自動(dòng)退出
,并將輸入的數(shù)據(jù)賦值給變量
卢鹦。
#!/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
選項(xiàng)臀脏,后接數(shù)值1
,指示read 命令只要接受到一個(gè)字符就退出
冀自。只要按下一個(gè)字符進(jìn)行回答揉稚,read 命令立即接受輸入并將其傳給變量
,無(wú)需按回車鍵熬粗。
只接收 2 個(gè)輸入就退出:
#!/bin/bash
read -n2 -p "請(qǐng)隨便輸入兩個(gè)字符: " any
echo "\n您輸入的兩個(gè)字符是:$any"
exit 0
執(zhí)行程序輸入兩個(gè)字符:
請(qǐng)隨便輸入兩個(gè)字符: 12 您輸入的兩個(gè)字符是:12
5搀玖、-s
選項(xiàng)能夠使read
命令中輸入的數(shù)據(jù)不顯示在命令終端上
(實(shí)際上,數(shù)據(jù)是顯示的驻呐,只是 read 命令將文本顏色設(shè)置成與背景相同的顏色)灌诅。輸入密碼常用這個(gè)選項(xiàng)。
#!/bin/bash
read -s -p "請(qǐng)輸入您的密碼:" pass
echo "\n您輸入的密碼是 $pass"
exit 0
執(zhí)行程序輸入密碼后是不顯示的:
請(qǐng)輸入您的密碼:
您輸入的密碼是 runoob
6.讀取文件
每次調(diào)用read
命令都會(huì)讀取文件中的一行
文本含末。當(dāng)文件沒(méi)有可讀的行時(shí)猜拾,read
命令將以非零狀態(tài)
退出。
通過(guò)什么樣的方法將文件中的數(shù)據(jù)傳給 read 呢佣盒?使用cat 命令并通過(guò)管道將結(jié)果直接傳送給包含 read 命令的 while 命令
挎袜。
測(cè)試文件 test.txt 內(nèi)容如下:
123
456
runoob
測(cè)試代碼:
#!/bin/bash
count=1 # 賦值語(yǔ)句,不加空格
cat test.txt | while read line # cat 命令的輸出作為read命令的輸入,read讀到>的值放在line中
do
echo "Line $count:$line"
count=$[ $count + 1 ] # 注意中括號(hào)中的空格肥惭。
done
echo "finish"
exit 0
執(zhí)行結(jié)果為:
Line 1:123
Line 2:456
Line 3:runoob