linux中read用法
2024-10-19 22:41:32
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:从指定的文件描述中读取。
最新文章
- 提升效率(时间准确性),减少时间和资源的消耗——由89C52/89C51的定时器中断引出的一些问题
- Xen虚拟化基本原理详解
- full_case &; parallel_case
- jquery对象与js对象的相互转换
- 2876: [Noi2012]骑行川藏 - BZOJ
- 02day1
- ORACLE【0】:基本操作
- Linux Add a Swap File
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- koa-static node服务器设置静态目录
- java程序中默认浮点形值常量是什么类型的?如何区分不同类型的浮点型整数值常量?
- idea首次创建新模块的详细操作
- 51Nod1553 周期串查询 字符串 哈希 线段树
- Java内存管理-掌握自定义类加载器的实现(七)
- mysql中的锁
- ECMAScript6语法重点(一)
- 洛谷 5291 [十二省联考2019]希望(52分)——思路+树形DP
- 那些年,UI设计师还在手工标注和切图时走的弯路
- Java中的逆变与协变 很直接不饶弯的讲出来了
- Swift 2.x 升为 swift 3后语法不兼容问题适配
热门文章
- Django-缓存机制、跨域请求(CORS)、ContentType组件
- [python][django学习篇][9]设计正在博客视图(3)
- django ORM 外键详解
- Spring框架DataSource
- HDU 4614 Vases and Flowers(线段树+二分)
- [SDOI2015][bzoj3994] 约数个数和 [莫比乌斯反演]
- bzoj2115【WC2011】XOR
- Java简明教程 11.异常
- Activity启动创建 (AcitivtyManageService,ActivityThread,Activity)
- java运行时间计算