1. 简单读取

 

read命令接收标准输入(键盘)的输入或其他文件描述符的输入,得到输入后,read命令将数据放入一个标准变量中。下面是 read命令的最简单形式:



bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ vi read-simple.sh
 
#!/bin/bash
#这里默认会换行
echo "enter your website: "
#读取从键盘的输入
read website
echo "your website is $website"
exit 0  #退出	 
 
#直接执行shell的结果
bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read-simple.sh
enter your website:
www.wirelessqa.com
your website is www.wirelessqa.com
 
#如果想看清楚每一步的执行,可以加上-x
bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh -x read-simple.sh
+ echo 'enter your website: '
enter your website:
+ read website
www.wirelessqa.com
+ echo 'your website is www.wirelessqa.com'
your website is www.wirelessqa.com
+ exit 0



 

2.直接跟上提示read -p



bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ vi read-p.sh

#1.读取单个变量

#!/bin/bash

read -p "enter your website: " website #这里的变量只有一个,也可以有多个
echo "your website is $website"
exit 0
 
#执行结果
bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read-p.sh
enter your website: www.wirelessqa.com
your website is www.wirelessqa.com
 
#2.读取多个变量
	 
bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ vi read-p-more.sh
 
#!/bin/bash
#读取输入的多个变量
read -p "enter your name and website: " name website
echo "your name is $name,your websit is $website"
exit 0
#执行结果
bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh -x read-p-more.sh
+ read -p 'enter your name and website: ' name website
enter your name and website: bixiaopeng www.wirelessqa.com
+ echo 'your name is bixiaopeng,your websit is www.wirelessqa.com'
your name is bixiaopeng,your websit is www.wirelessqa.com
+ exit 0



 

3.计时输入read -t 

 

-t选项指定read命令等待输入的秒数。当计时满时,read命令返回一个非零退出状态;

 

使用read命令存在着潜在危险。脚本很可能会停下来一直等待用户的输入。如果无论是否输入数据脚本都必须继续执行,那么可以使用-t选项指定一个计时器。


bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ vi read-t.sh
 
bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ cat read-t.sh
#!/bin/bash
	 
if read -t 10 -p "请在10秒内输入毕小朋博客的地址: " website
then
    if [ $website = "www.wirelessqa.com" ]
    then
        echo "你输入的地址是对的:$website"
    else
        echo "你输入的网址是错的:$website"
     fi
    else
        echo "对不起,你已超时,请在10秒内输入!"
fi
exit 0
 
#执行结果1
bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read-t.sh
请在10秒内输入毕小朋博客的地址: 对不起,你已超时,请在10秒内输入!

#执行结果2
bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read-t.sh
请在10秒内输入毕小朋博客的地址: weibo.com/wirelessqa
你输入的网址是错的:weibo.com/wirelessqa

#执行结果3
bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read-t.sh
请在10秒内输入毕小朋博客的地址: www.wirelessqa.com
你输入的地址是对的:www.wirelessqa.com


 

4.计数输入read -n数量

 

当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量

 

 

bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ vi read-n.sh
02	 
03	bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ cat read-n.sh
04	#!/bin/bash
05	 
06	#例子1.只接收一个输入就退出
07	read -n1 -p "你喜欢老毕的博客吗[y/n]? " answer
08	case $answer in
09	Y | y)
10	   echo " 好,谢谢哈!";;
11	N | n)
12	   echo " oh,我会继续努力的!";;
13	*)
14	   echo " 输入错误,请输入y/n";;
15	esac
16	 
17	#例子2.只接收2个输入就退出
18	read -n2 -p "请随便输入两个字符: " any
19	echo " 您输入的两个字符是:$any"
20	exit 0
21	 
22	#执行结果
23	bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read-n.sh
24	你喜欢老毕的博客吗[y/n]? n oh,我会继续努力的!
25	请随便输入两个字符: ai 您输入的两个字符是:ai
 


 

5.隐藏输入read -s

 

bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ vi read-s.sh
02	bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ cat read-s.sh
03	#!/bin/bash
04	#如果想让用户的输入不显示在屏幕上,请使用read -s
05	read -s -p "请输入你的密码: " pass
06	echo
07	echo "你的密码是: $pass"
08	exit 0
09	 
10	#执行结果
11	bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read-s.sh
12	请输入你的密码:
13	你的密码是: bixiaopeng

 

6.读取文件

 

每次调用read命令都会读取文件中的”一行”文本。当文件没有可读的行时,read命令将以非零状态退出。

 

通过什么样的方法将文件中的数据传给read呢?使用cat命令并通过管道将结果直接传送给包含read命令的while命令

 

bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ vi read-file.sh
02	 
03	bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ cat read-file.sh
04	#!/bin/bash
05	 
06	count=1
07	cat read-s.sh |while read line #通过cat read-s.sh文件的输出,作为read 的输入给line
08	do
09	   echo "$count: $line"
10	   count=$[ $count + 1 ]
11	done
12	echo "结束"
13	exit 0
14	 
15	#执行结果
16	bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read-file.sh
17	1: #!/bin/bash
18	2: #如果想让用户的输入不显示在屏幕上,请使用read -s
19	3: read -s -p "请输入你的密码: " pass
20	4: echo
21	5: echo "你的密码是: $pass"
22	6: exit 0
23	结束
————————————————

 

 

作者:毕小朋

 

 

-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。

-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志,会举例说  明。

-p 后面跟提示信息,即在输入前打印提示信息。

-e 在输入的时候可以时候命令补全功能。

-n 后跟一个数字,定义输入文本的长度,很实用。

-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。

-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。

-t 后面跟秒数,定义输入字符的等待时间。

-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。