shell中read用法

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
相關文章
相關標籤/搜索