1. 简单读取
read命令接收标准输入(键盘)的输入或其他文件描述符的输入,得到输入后,read命令将数据放入一个标准变量中。下面是 read命令的最简单形式:
01 | bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ vi read -simple.sh |
02 |
03 | #!/bin/bash |
04 | #这里默认会换行 |
05 | echo "enter your website: " |
06 | #读取从键盘的输入 |
07 | read website |
08 | echo "your website is $website" |
09 | exit 0 #退出 |
10 |
11 |
12 | #直接执行shell的结果 |
13 | bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read -simple.sh |
14 | enter your website: |
15 | www.wirelessqa.com |
16 | your website is www.wirelessqa.com |
17 |
18 | #如果想看清楚每一步的执行,可以加上-x |
19 | bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh -x read -simple.sh |
20 | + echo 'enter your website: ' |
21 | enter your website: |
22 | + read website |
23 | www.wirelessqa.com |
24 | + echo 'your website is www.wirelessqa.com' |
25 | your website is www.wirelessqa.com |
26 | + exit 0 |
2.直接跟上提示read -p
01 | bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ vi read -p.sh |
02 |
03 | #1.读取单个变量 |
04 |
05 | #!/bin/bash |
06 |
07 | read -p "enter your website: " website #这里的变量只有一个,也可以有多个 |
08 | echo "your website is $website" |
09 | exit 0 |
10 |
11 |
12 | #执行结果 |
13 | bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read -p.sh |
14 | enter your website: www.wirelessqa.com |
15 | your website is www.wirelessqa.com |
16 |
17 | #2.读取多个变量 |
18 |
19 | bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ vi read -p- more .sh |
20 |
21 |
22 | #!/bin/bash |
23 | #读取输入的多个变量 |
24 | read -p "enter your name and website: " name website |
25 | echo "your name is $name,your websit is $website" |
26 | exit 0 |
1 | #执行结果 |
2 | bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh -x read -p- more .sh |
3 | + read -p 'enter your name and website: ' name website |
4 | enter your name and website: bixiaopeng www.wirelessqa.com |
5 | + echo 'your name is bixiaopeng,your websit is www.wirelessqa.com' |
6 | your name is bixiaopeng,your websit is www.wirelessqa.com |
7 | + exit 0 |
3.计时输入read -t
-t选项指定read命令等待输入的秒数。当计时满时,read命令返回一个非零退出状态;
使用read命令存在着潜在危险。脚本很可能会停下来一直等待用户的输入。如果无论是否输入数据脚本都必须继续执行,那么可以使用-t选项指定一个计时器。
01 | bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ vi read -t.sh |
02 |
03 |
04 | bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ cat read -t.sh |
05 | #!/bin/bash |
06 |
07 | if read -t 10 -p "请在10秒内输入毕小朋博客的地址: " website |
08 | then |
09 | if [ $website = "www.wirelessqa.com" ] |
10 | then |
11 | echo "你输入的地址是对的:$website" |
12 | else |
13 | echo "你输入的网址是错的:$website" |
14 | fi |
15 | else |
16 | echo "对不起,你已超时,请在10秒内输入!" |
17 | fi |
18 | exit 0 |
19 |
20 | #执行结果1 |
21 | bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read -t.sh |
22 | 请在10秒内输入毕小朋博客的地址: 对不起,你已超时,请在10秒内输入! |
23 |
24 | #执行结果2 |
25 | bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read -t.sh |
26 | 请在10秒内输入毕小朋博客的地址: weibo.com /wirelessqa |
27 | 你输入的网址是错的:weibo.com /wirelessqa |
28 |
29 | #执行结果3 |
30 | bixiaopeng@bixiaopengtekiMacBook-Pro linuxTest$ sh read -t.sh |
31 | 请在10秒内输入毕小朋博客的地址: www.wirelessqa.com |
32 | 你输入的地址是对的:www.wirelessqa.com |
4.计数输入read -n数量
当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量
01 | 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
01 | 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命令
01 | 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 | 结束 |
订阅
微信搜索“毕小烦”或者扫描下面的二维码,即可订阅我的文章。
如果文章对你有帮助,请随手点个赞吧!
(完)