read在while中的经常用法:

 root@ubuntu:/var/lib/logrotate :: # cat /etc/cron.daily/logrotate
#!/bin/sh # Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head - status > status.clean
sed 's/"//g' status | while read logfile date
do
[ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status test -x /usr/sbin/logrotate || exit
/usr/sbin/logrotate /etc/logrotate.conf
root@ubuntu:/var/lib/logrotate :: #

在上面中

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

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

但是当用:

 root@ubuntu:/var/lib/logrotate :: # echo "aaa bbb" | read one two
root@ubuntu:/var/lib/logrotate :: # echo $one

one为空,

但是:

 root@ubuntu:/var/lib/logrotate :: # echo "aaa bbb" | (read one two;echo -e "$one\n$two")
aaa
bbb

解释:

这里的问题在于read one是有管道产生的进程,而echo $one是外面的进程,两个one不是同一个变量,所以打印出来one没有数据

-a: 将输入的的文本放数组中,(默认已空格或者制表符分割),数组以下标0开始;

 root@ubuntu:/home/dyx/linux :: # read -a name
nihao hhaha
root@ubuntu:/home/dyx/linux :: # echo ${name[*]}
nihao hhaha
root@ubuntu:/home/dyx/linux :: # echo ${name[]}
hhaha

-d:指定结束符,当输入中出现指定的结束符时,read命令将认为输入已经结束(默认为换行);

-e:从标准输入读取中时,使用Readline库获取输入(此时用户可以使用退格键、方向箭头进行简单的行编辑操作);

-n:指定读入的字符数n;

-p:将该选项指定的字符串输出到标准错误,并读取输入;

-r:将读取到的字符串字段放到不同的变量中;

 root@ubuntu:/home/dyx/linux :: # read -r v1 v2 v3
nifds fds fff
root@ubuntu:/home/dyx/linux :: # echo $v1
nifds
 root@ubuntu:/home/dyx/linux :: # IFS="#";read -r v1 v2 v3
fdsfdsf fds #hshfhds#fdsf dsfs
root@ubuntu:/home/dyx/linux :: # echo $v1
fdsfdsf fds
root@ubuntu:/home/dyx/linux :: # echo $v2
hshfhds

最好有在修改IFS之前有,Old_IFS=$IFS, 之后再IFS=$Old_IFS

-s:先锁住屏幕,让后再从标准输入中读入字符;

-t:如果用户在指定的时间内没有输入,就结束读取状态;

-u:从指定的文件描述中读取。

最新文章

  1. 提升效率(时间准确性),减少时间和资源的消耗——由89C52/89C51的定时器中断引出的一些问题
  2. Xen虚拟化基本原理详解
  3. full_case & parallel_case
  4. jquery对象与js对象的相互转换
  5. 2876: [Noi2012]骑行川藏 - BZOJ
  6. 02day1
  7. ORACLE【0】:基本操作
  8. Linux Add a Swap File
  9. [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
  10. koa-static node服务器设置静态目录
  11. java程序中默认浮点形值常量是什么类型的?如何区分不同类型的浮点型整数值常量?
  12. idea首次创建新模块的详细操作
  13. 51Nod1553 周期串查询 字符串 哈希 线段树
  14. Java内存管理-掌握自定义类加载器的实现(七)
  15. mysql中的锁
  16. ECMAScript6语法重点(一)
  17. 洛谷 5291 [十二省联考2019]希望(52分)——思路+树形DP
  18. 那些年,UI设计师还在手工标注和切图时走的弯路
  19. Java中的逆变与协变 很直接不饶弯的讲出来了
  20. Swift 2.x 升为 swift 3后语法不兼容问题适配

热门文章

  1. Django-缓存机制、跨域请求(CORS)、ContentType组件
  2. [python][django学习篇][9]设计正在博客视图(3)
  3. django ORM 外键详解
  4. Spring框架DataSource
  5. HDU 4614 Vases and Flowers(线段树+二分)
  6. [SDOI2015][bzoj3994] 约数个数和 [莫比乌斯反演]
  7. bzoj2115【WC2011】XOR
  8. Java简明教程 11.异常
  9. Activity启动创建 (AcitivtyManageService,ActivityThread,Activity)
  10. java运行时间计算