Linux 内部命令 read 详解!默认读取来自键盘的输入,可以使用 -u 指定来自 fd 的输入!


 


read —— 内部命令!

root@zhengzelin:~# type read
read is a shell builtin

read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量。

read 中来自标准输入的 参数 的分隔符 是空格!


1、格式:

格式: read  [options]  varname

也可以不跟选项!

最常见的选项:
"★ -p  : reap -p  提示符 varname( # 指定提示符,可以是一段话,用户看到这句话就知道该输入varname的参数了!)"
常用于 shell 脚本中....

常见组合: read -e -p “提示消息” varname ; 当 有 -e在 varname 的值的时候,可以自动补齐


其他选项:
-a  : read -a varname;( # 将读取的参数分配给数组的顺序索引变量varname,从零开始...)

-d  : read -d 结束符 varname;( # 当给varname赋值的时候,如果你输入"结束符"中第一个字母,输入就会终止!而不需要你输回车!)

-n  : read -n 数字 varname;( # -n 指定有多少字符可以被有效读取!eg: -n 5,系统只能读取到第五个字符)

-t  : read -t 时间(s) varname;( # 指定时间,超过这个时间将自动退出read命令!默认单位为 s!)

-s  : read -s varname;(# 安静模式,给 varname 赋值的时候,不在终端上显示!)

-u  : read -u fd varname;( # 从文件描述符中读入,该文件描述符可以是exec新开启的 )

-e  : read -e varname;( # 给varname 赋值的时候,加了 -e ,可以使用 tab 补齐该目录下的文件名)

 

2、举例:

2.1、read -p 指定提示信息:

格式:  read -p  “提示信息”  varname(变量名)


root@zhengzelin:~# read -p "看到这句话请输入变量名为a 的值:" test
看到这句话请输入变量名为test 的值:1 2 3

root@zhengzelin:~# echo $a
1 2 3

2.2、reap -a 数组参数:

格式: read -a varname (这里的 varname 将作为数组名)


root@zhengzelin:~# read -a test
1 2 3 4
root@zhengzelin:~# echo ${#test[@]}   # 查看数组名为 test 的参数个数(空格作为分隔符)
4

2.3、read -d 指定定界符:

格式: read -d 定界符 varname (如果你输入一个字符串作为定界符,那么生效的是该字符串的第一个字符!)


root@zhengzelin:~# read -d smart test
abces(这里会自动结束,而且s不会作为 test 变量的值,定界符是字符串的第一个字符)

abce1root@zhengzelin:~# echo $test
abce

2.4、read -n 指定变量值的参数个数:

格式: read -n 数字 varname (表示该变量的值最多是几个字符,空格也算字符)



root@zhengzelin:~# read -n 3 test
1 2 ( # 空格也算字符,这里当你输入了第三个字符的时候,系统自动结束赋值!)

root@zhengzelin:~# echo $test
1 2

2.5、read -t 指定赋值的时间:

格式: read -t 时间(s) varname  ( # 超过多少秒没给变量赋值则退出,或者说赋值时间不能超过多少秒)


root@zhengzelin:~# read -t 3 test
[什么也不输入,等待3s,发现自动退出]
root@zhengzelin:~# echo $test
[]

2.6、read -s 指定为安静模式:

格式: read -s varname (# 安静模式)


root@zhengzelin:~# read -s test
[你在这里输入的参数,系统不显示,我这里输入的是 yes]
root@zhengzelin:~# echo $test
yes

 

3、未指定 varname 怎么办???

当你未指定varname的时候,不用慌,使用 $REPLY:


正确格式:read -p "我没有输入变量名怎么办?" varname
echo $varname


root@zhengzelin:~# read -p "我没有输入变量名怎么办?"
我没有输入变量名怎么办?aaa
root@zhengzelin:~# echo $REPLY
aaa

其他一些问题:

# 1、单个变量赋单个值()
root@zhengzelin:~# read a 
1 (回车)
root@zhengzelin:~# echo $a
1


# 2、单个变量赋多个值(保留格式)
root@zhengzelin:~s# read a
1 2 3 4
root@zhengzelin:~# echo $a
1 2 3 4
root@zhengzelin:~# read a
1,2,3
root@zhengzelin:~# echo $a
1,2,3


# 3、少量变量赋多个值()
root@zhengzelin:~# read a b 
1 2 3 4 5    
root@zhengzelin:~# echo $a
1
root@zhengzelin:~# echo $b
2 3 4 5


# 4、多个变量赋少量值()
root@zhengzelin:~# read a b 
1
root@zhengzelin:~# echo $a;echo $b
1
[]
发布了99 篇原创文章 · 获赞 72 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ljlfather/article/details/105203222
今日推荐