1. 程式人生 > >shell命令之read

shell命令之read

shell read

read:

簡介:

read命令從鍵盤讀取變量的值,通常用在shell腳本中與用戶進行交互的場合。該命令可以一次讀取多個變量的值,變量和輸入的值都需要使用空格隔開。在read命令後面,如果沒有指定變量名,讀取的數據將被自動賦值給特定的變量REPLY。



語法

read(選項)(參數



選項

Read可以帶有-a, -d, -e, -n, -p, -r, -t, 和 -s八個選項。


-a :將內容讀入到數值中


echo -n "Input muliple values into an array:"

read -a array


-d :表示delimiter,即定界符,一般情況下是以IFS為參數的間隔,但是通過-d,我們可以定義一直讀到出現執行的字符位置。例如read –d madfds value,讀到有m的字符的時候就不在繼續向後讀,例如輸入為 hello m,有效值為“hello”,請註意m前面的空格等會被刪除。這種方式可以輸入多個字符串,例如定義“.”作為結符號等等。


-e :只用於互相交互的腳本,它將readline用於收集輸入行。讀到這幾句話不太明白什麽意思,先跳過。


-n :用於限定最多可以有多少字符可以作為有效讀入。例如echo –n 4 value1 value2,如果我們試圖輸入12 34,則只有前面有效的12 3,作為輸入,實際上在你輸入第4個字符‘3’後,就自動結束輸入。這裏結果是value為12,value2為3。


-p :用於給出提示符,在前面的例子中我們使用了echo –n “…“來給出提示符,可以使用read –p ‘… my promt?’value的方式只需一個語句來表示。


-r :在參數輸入中,我們可以使用’/’表示沒有輸入完,換行繼續輸入,如果我們需要行最後的’/’作為有效的字符,可以通過-r來進行。此外在輸入字符中,我們希望/n這類特殊字符生效,也應采用-r選項。


-s :對於一些特殊的符號,例如箭頭號,不將他們在terminal上打印,例如read –s key,我們按光標,在回車之後,如果我們要求顯示,即echo,光標向上,如果不使用-s,在輸入的時候,輸入處顯示^[[A,即在terminal上 打印,之後如果要求echo,光標會上移。


-t :用於表示等待輸入的時間,單位為秒,等待時間超過,將繼續執行後面的腳本,註意不作為null輸入,參數將保留原有的值。


參數

變量:指定讀取值的變量名。


示例1:

從標準輸入讀取輸入並賦值給name

# read name

sxzhou


打印變量name

# echo $name

sxzhou


示例2:

-p指定提示符

# read -p "input your name: " name

input your name: sxzhou


# echo $name

sxzhou


示例3:

指定多個變量

# read -p "input animal name: " cat dog

input animal name: tom flower


# echo $cat

tom


# echo $dog

flower


示例4:

read 命令中不指定變量,那麽read命名將它收到的任何數據都放在特殊環境變量REPLY中

# read

this is reply


# echo $REPLY

this is reply


示例5:

利用REPLY求階乘

# vi product.sh

#!/bin/bash

read -p "Enter a number: "

product=1

for (( count=1; count<=$REPLY; count++ ))

do

product=$[ $product * $count ]

done

echo "The product of $REPLY is $product"


# sh product.sh

4

The product of 4 is 24


註意:

小括號和中括號符號和內容之間有空格

等號兩邊沒有空格


示例6:

超時測試 read -t


# vi overtime.sh

#!/bin/bash

if read -t 5 -p "Please enter your name: " name

then

echo "Hello $name, welcome!"

else

echo

echo "Sorry, too slow! please retry"

fi


五秒內輸入名字

# sh overtime.sh

Please enter your name:

sxzhou

Hello sxzhou, welcome!


五秒外

# sh overtime.sh

Please enter your name:

Sorry, too slow! please retry


示例7:

read命令對輸入進行判斷


# vi decide.sh

#!/bin/bash

read -n1 -p "Do you want to continue [Y(y)/N(n)] ?" answer

case $answer in

Y | y) echo

echo "fine, continue...";;

N | n) echo

echo "ok,goodbay"

exit;;

esac


# sh decide.sh

Do you want to continue [Y(y)/N(n)] ? y

fine, continue...


# sh decide.sh

Do you want to continue [Y(y)/N(n)] ? N

ok,goodbay


註:

-n1為限制輸入一個字符


示例8:

隱藏輸入 read -s


# vi hide.sh

#!/bin/bash

read -s -p "Enter your passwd: " pass

echo

echo "Is your passwd readlly $pass?"


# sh hide.sh

Enter your passwd: (輸入123456,不顯示)

Is your passwd readlly 123456?


示例9:

# vi text.sh

#!/bin/bash

count=1

cat hide.sh | while read line

do

echo "Line $count: $line"

count=$[ $count + 1 ]

done

echo "Finished processing the file"


# sh text.sh

Line 1: #!/bin/bash

Line 2: read -s -p "Enter your passwd: " pass

Line 3: echo

Line 4: echo "Is your passwd readlly $pass?"


shell命令之read