read —— 内部命令!
root@zhengzelin:~# type read
read is a shell builtin
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量。
read 中来自标准输入的 参数 的分隔符 是空格!
格式: 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 补齐该目录下的文件名)
格式: read -p “提示信息” varname(变量名)
root@zhengzelin:~# read -p "看到这句话请输入变量名为a 的值:" test
看到这句话请输入变量名为test 的值:1 2 3
root@zhengzelin:~# echo $a
1 2 3
格式: read -a varname (这里的 varname 将作为数组名)
root@zhengzelin:~# read -a test
1 2 3 4
root@zhengzelin:~# echo ${#test[@]} # 查看数组名为 test 的参数个数(空格作为分隔符)
4
格式: read -d 定界符 varname (如果你输入一个字符串作为定界符,那么生效的是该字符串的第一个字符!)
root@zhengzelin:~# read -d smart test
abces(这里会自动结束,而且s不会作为 test 变量的值,定界符是字符串的第一个字符)
abce1root@zhengzelin:~# echo $test
abce
格式: read -n 数字 varname (表示该变量的值最多是几个字符,空格也算字符)
root@zhengzelin:~# read -n 3 test
1 2 ( # 空格也算字符,这里当你输入了第三个字符的时候,系统自动结束赋值!)
root@zhengzelin:~# echo $test
1 2
格式: read -t 时间(s) varname ( # 超过多少秒没给变量赋值则退出,或者说赋值时间不能超过多少秒)
root@zhengzelin:~# read -t 3 test
[什么也不输入,等待3s,发现自动退出]
root@zhengzelin:~# echo $test
[空]
格式: read -s varname (# 安静模式)
root@zhengzelin:~# read -s test
[你在这里输入的参数,系统不显示,我这里输入的是 yes]
root@zhengzelin:~# echo $test
yes
当你未指定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
[空]