基本用法

    read命令主要用于从标准输入读取内容或从文件中读取内容,并把信息保存到变量中。其常用用法如下所示:

read [选项] [文件]
选项 解释
-a array 将内容读取到数值中,变量默认为数组且以空格做为分割符
-d delimiter 遇到指定的字符即停止读取
-n nchars 指定最多可以读入的字符数,即定义输入文本的长度
-r 屏蔽转义符
-p prompt 显示提示信息
-s 静默模式,在输入字符时不在终端中显示,常用于密码输入等
-t timeout 指定超时时间
-u FD 从文件描述符中读入,该FD可以由exec开启

用法示例

1、从标准输入读入

[root@localhost test]# cat read.sh
#!/bin/bash
echo -n "Please input your name:"
read name
echo "Hello $name"
[root@localhost test]# bash read.sh
Please input your name:Jack
Hello Jack

2、指定显示信息从标准输入读入

[root@localhost test]# cat read.sh
#!/bin/bash
# echo -n "Please input your name:"
read -p "Please input your name:" name
# read name
echo "Hello $name"
[root@localhost test]# bash read.sh
Please input your name:Jack
Hello Jack

在以上示例中,read是一次可以接受多个参数的,如下所示:

read -p "Please input your name:" firstName secondName lastName

但需要注意的事项如下:

  • 如果输入的数据少于变量个数,则多余的变量不会获取到数据,即变量值为空
  • 如果输入的数据多于变量个数,则超出的数据将全部赋给最后一个变量
  • 如果在read命令后面没有定义任何变量,脚本在执行时,如果用户输入数据,此时数据则保存到环境变量$REPLY

3、指定超时时间

[root@localhost test]# cat read.sh
#!/bin/bash
if read -t 3 -p "Please input your name:" firstName secondName lastName
then
echo "variable is $firstName - $secondName - $lastName"
else
echo -e "\ntimeout\n"
fi
[root@localhost test]# bash read.sh
Please input your name:
timeout

4、从指定文件中读取内容

[root@localhost test]# cat -n test.txt
1 this is test text.
2 this is second line.
3 Hello world
4 C# Main
5 Python
# 使用-u选项
[root@localhost test]# cat readtest.sh
#!/bin/bash
exec 5< ~/test/test.txt
count=0
while read -u 5 var
do
let count=$count+1
echo "Line $count is $var"
done
echo "Total line count is $count"
exec 5<&-
[root@localhost test]# bash readtest.sh
Line 1 is this is test text.
Line 2 is this is second line.
Line 3 is Hello world
Line 4 is C# Main
Line 5 is Python
Total line count is 5
# 使用管道
[root@localhost test]# cat readtest.sh
#!/bin/bash
count=1
cat ~/test/test.txt | while read line
do
echo "Current line $count - $line "
let count=$count+1
done
echo "Total line count is $count"
[root@localhost test]# bash readtest.sh
Current line 1 - this is test text.
Current line 2 - this is second line.
Current line 3 - Hello world
Current line 4 - C# Main
Current line 5 - Python
Total line count is 1
# 使用重定向
[root@localhost test]# cat readtest.sh
#!/bin/bash
count=0
while read line
do
let count=$count+1
echo "Current line $count - $line "
done < ~/test/test.txt
echo "Total line count is $count"
[root@localhost test]# bash readtest.sh
Current line 1 - this is test text.
Current line 2 - this is second line.
Current line 3 - Hello world
Current line 4 - C# Main
Current line 5 - Python
Total line count is 5

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

最新文章

  1. setTimeout 和 throttle 那些事儿
  2. Java中的static关键字解析
  3. Sprint 2(第一天)
  4. 最大流 总结&amp;&amp;做题记录
  5. (转载)OSI七层参考模型和TCP/IP四层参考模型
  6. MySQL与Oracle的语法区别详细对比 (转)
  7. Redis client Python usage
  8. win10外接键盘失灵
  9. IOS webview iframe 宽度超出屏幕解决方案
  10. [ExtJS5学习笔记]第十二节 Extjs5开发遇到的问题列表记录
  11. 最小生成树&lt;lct&gt;
  12. mysql索引类型和方式
  13. 禁用SSL v2.0、SSL v3.0协议
  14. 2.HTML文件中&lt;!DOCTYPE html&gt;的作用
  15. 在kali linux之下 下载并解压的文件名呈现乱码 解决方案
  16. hdu1272 小希的迷宫【并查集】
  17. VUE路由去除#问题
  18. 处理json的常用java类库:Json-lib(org.json)、Gson、Jackson、Fastjson
  19. 【ZOJ3316】Game(带花树)
  20. BZOJ3238 [Ahoi2013]差异 SA+单调栈

热门文章

  1. 微信小程序详解——页面之间的跳转方式【路由】和参数传递
  2. 微信小程序设置底部导航栏目方法
  3. [DP题]登山
  4. 微软开源rDSN分布式系统开发框架
  5. UE4关于Oculus Rift (VR)开发忠告
  6. Python 数据处理库 pandas
  7. PyQt5系列教程(二)利用QtDesigner设计UI界面
  8. selenium+python自动化77-autoit文件上传
  9. Django学习---原生ajax
  10. 普通方法调用,Invoke,begininvoke三者的区别总结及异步与同步的区别总结