shell命令之read

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

Acwing Linux基础课笔记shell语法

Linux之shell

Linux Shell系列教程之Shell printf命令详解

Linux命令之改变用户的shell设定chsh

linux之shell命令

Hadoop初级之shell脚本