1. Read的一些選項java
Read能夠帶有-a, -d, -e, -n, -p, -r, -t, 和 -s八個選項。shell
-a :將內容讀入到數值中bash
1
2
3
|
echo -n
"Input muliple values into an array:"
read -a array
echo
"get ${#array[@]} values in array"
|
-d : 表示delimiter,即定界符,通常狀況下是以IFS爲參數的間隔,可是經過-d,咱們能夠定義一直讀到出現執行的字符位置。例如read –d madfds value,讀到有m的字符的時候就不在繼續向後讀,例如輸入爲 hello m,有效值爲「hello」,請注意m前面的空格等會被刪除。這種方式能夠輸入多個字符串,例如定義「.」做爲結符號等等。spa
-e :只用於互相交互的腳本,它將readline用於收集輸入行。讀到這幾句話不太明白什麼意思,先跳過。命令行
-n : 用於限定最多能夠有多少字符能夠做爲有效讀入。例如echo –n 4 value1 value2,若是咱們試圖輸入12 34,則只有前面有效的12 3,做爲輸入,實際上在你輸入第4個字符‘3’後,就自動結束輸入。這裏結果是value爲12,value2爲3。code
-p :用於給出提示符,在前面的例子中咱們使用了echo –n 「…「來給出提示符,可使用read –p ‘… my promt?’value的方式只需一個語句來表示。blog
-r :在參數輸入中,咱們可使用’/’表示沒有輸入完,換行繼續輸入,若是咱們須要行最後的’/’做爲有效的字符,能夠經過-r來進行。此外在輸入字符中,咱們但願/n這類特殊字符生效,也應採用-r選項。ip
-s : 對於一些特殊的符號,例如箭頭號,不將他們在terminal上打印,例如read –s key,咱們按光標,在回車以後,若是咱們要求顯示,即echo,光標向上,若是不使用-s,在輸入的時候,輸入處顯示^[[A,即在terminal上 打印,以後若是要求echo,光標會上移。ci
-t :用於表示等待輸入的時間,單位爲秒,等待時間超過,將繼續執行後面的腳本,注意不做爲null輸入,參數將保留原有的值字符串
2. Read的相關實例
a. 拼接文件
1
2
3
4
|
#將afile文件中的前三行與bfile中的前四行拼接在一塊兒
while
read -u3 i && read -u4 j;
do
echo $i $j
done
3
<afile
4
<bfile
|
b. 輸入不在終端顯示
1
2
|
read -p
"Input passwd:"
-s Passwd
echo $Passwd
|
c. 限時輸入,不然退出
1
2
|
#延遲五秒,沒有輸入將自動退出
read -p
"Input a number:"
-t
5
Number
|
d. 讀取限定字符
1
2
|
#從輸入中取
5
個字符
read -p
"Input a word:"
-n
5
Word
|
e. 等待輸出q退出
1
2
|
#輸入,直到輸入q,將自動退出
read -dp -p
"Input some words end with q:"
word
|
====================================================================================================
read命令 -n(不換行) -p(提示語句) -n(字符個數) -t(等待時間) -s(不回顯)
一、基本讀取
read命令接收標準輸入(鍵盤)的輸入,或其餘文件描述符的輸入(後面在說)。獲得輸入後,read命令將數據放入一個標準變量中。下面是read命令
的最簡單形式::
1
2
3
4
5
6
7
8
9
|
#!/bin/bash
echo -n
"Enter your name:"
//參數-n的做用是不換行,echo默認是換行
read name
//從鍵盤輸入
echo
"hello $name,welcome to my program"
//顯示信息
exit
0
//退出shell程序。
|
因爲read命令提供了-p參數,容許在read命令行中直接指定一個提示。
因此上面的腳本能夠簡寫成下面的腳本::
1
2
3
4
5
6
7
|
#!/bin/bash
read -p
"Enter your name:"
name
echo
"hello $name, welcome to my program"
exit
0
|
在上面read後面的變量只有name一個,也能夠有多個,這時若是輸入多個數據,則第一個數據給第一個變量,第二個數據給第二個變量,若是輸入數據個數過多,則最後全部的值都給第一個變量。若是太少輸入不會結束。
在read命令行中也能夠不指定變量.若是不指定變量,那麼read命令會將接收到的數據放置在環境變量REPLY中。
例如::
read -p "Enter a number"
環境變量REPLY中包含輸入的全部數據,能夠像使用其餘變量同樣在shell腳本中使用環境變量REPLY.
二、計時輸入.
使用read命令存在着潛在危險。腳本極可能會停下來一直等待用戶的輸入。若是不管是否輸入數據腳本都必須繼續執行,那麼可使用-t選項指定一個計時器。
-t選項指定read命令等待輸入的秒數。當計時滿時,read命令返回一個非零退出狀態;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/bin/bash
if
read -t
5
-p
"please enter your name:"
name
then
echo
"hello $name ,welcome to my script"
else
echo
"sorry,too slow"
fi
exit
0
|
除了輸入時間計時,還能夠設置read命令計數輸入的字符。當輸入的字符數目達到預約數目時,自動退出,並將輸入的數據賦值給變量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/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命令當即
接受輸入並將其傳給變量。無需按回車鍵。
三、默讀(輸入不顯示在監視器上)
有時會須要腳本用戶輸入,但不但願輸入的數據顯示在監視器上。典型的例子就是輸入密碼,固然還有不少其餘須要隱藏的數據。
-s選項可以使read命令中輸入的數據不顯示在監視器上(實際上,數據是顯示的,只是read命令將文本顏色設置成與背景相同的顏色)。
1
2
3
4
5
6
7
|
#!/bin/bash
read -s -p
"Enter your password:"
pass
echo
"your password is $pass"
exit
0
|
四、讀文件
最後,還可使用read命令讀取Linux系統上的文件。
每次調用read命令都會讀取文件中的"一行"文本。當文件沒有可讀的行時,read命令將以非零狀態退出。
讀取文件的關鍵是如何將文本中的數據傳送給read命令。
最經常使用的方法是對文件使用cat命令並經過管道將結果直接傳送給包含read命令的while命令
例子::
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/bin/bash
count=
1
//賦值語句,不加空格
cat test |
while
read line
//cat 命令的輸出做爲read命令的輸入,read讀到的值放在line中
do
echo
"Line $count:$line"
count=$[ $count +
1
]
//注意中括號中的空格。
done
echo
"finish"
exit
0
|