read指令使用方法

流过昼夜 提交于 2020-04-06 22:04:32

 

read命令用于从标准输入中读取输入单行,并将读取的单行根据IFS变量分裂成多个字段,并将分割后的字段分别赋值给指定的变量列表var_name。第一个字段分配给第一个变量var_name1,第二个字段分配给第二个变量var_name2,依次到结束。如果指定的变量名少于字段数量,则多出的字段数量也同样分配给最后一个var_name,如果指定的变量命令多于字段数量,则多出的变量赋值为空。

如果没有指定任何var_name,则分割后的所有字段都存储在特定变量REPLY中

常用参数
-p:给出提示符。默认不支持"\n"换行-s:静默模式。输入的内容不会回显在屏幕上-t:给出超时时间,在达到超时时间时,read退出并返回错误-n:限制读取N个字符就自动结束读取,如果没有读满N个字符就按下回车或遇到换行符,则也会结束读取-N:严格要求读满N个字符才自动结束读取,即使中途按下了回车或遇到了换行符也不结束。其中换行符或回车算一个字符-a:将分裂后的字段依次存储到指定的数组中,存储的起始位置从数组的index=0开始-p:给出提示符

简短示例

#!/bin/bashread -p "print a number: " numif [ $num -eq 5 ]; then        echo "input right" && echo $numelse        echo "input error"fiexit#执行[root@localhost testsh]#./read.sh print a number: 5input right
如果没有指定变量,read会把传入的值传给$REPLY,只要调用$REPLY就可以引用
#!/bin/bashread -p "print a number: "if [ $REPLY -eq 5 ]; then        echo "input right" && echo $REPLYelse        echo "input error"fiexit
-t:给出超时时间,在达到超时时间时,read退出并返回错误
#!/bin/bash##if read -t 5 -p "input a number: " numthen        echo "$num inputed"else        echo "timeout"fiexit#执行[root@localhost testsh]#./timeout.sh input a number: timeout
-n:限制读取N个字符就自动结束读取,如果没有读满N个字符就按下回车或遇到换行符,则也会结束读取
[root@localhost testsh]#read -n 512345[root@localhost testsh]#[root@localhost testsh]#read -n 5123
-a:将分裂后的字段依次存储到指定的数组中,存储的起始位置从数组的index=0开始
[root@localhost testsh]#read -a value1 2 3 4 [root@localhost testsh]#echo ${value[0]}1[root@localhost testsh]#echo ${value[1]}2[root@localhost testsh]#echo ${value[2]}3[root@localhost testsh]#echo ${value[3]}4
read读取文件内容
#!/bin/bash###read file ip.txtcat /mnt/ip.txt | while read IPdo        echo "the ip : $IP"doneecho "finsh"exit
执行读取ip.txt内容结果
the ip : 192.168.11.10the ip : 192.168.11.11the ip : 192.168.11.12the ip : 192.168.11.13the ip : 192.168.11.14the ip : 192.168.11.15the ip : 192.168.11.16the ip : 192.168.11.17the ip : 192.168.11.18the ip : 192.168.11.19finsh 
或者使用for循环读取
for IP in `cat /mnt/ip.txt`doecho $IPdone 
read指令还可以将接收的值作为case语句判断的条件值,使用如下
#!/bin/bashread -t 30 -p "Do you want exit script[Y/N]?" charcase "$char" in        "Y" | "y")                echo "bye"                ;;        "N" | "n")                echo "stay"                ;;        *)                echo "output error,please input N,n/Y.y"                ;;esac

执行

[root@localhost testsh]#./bak.sh Do you want exit script[Y/N]?nstay
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!