linux中read用法
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:从指定的文件描述中读取。
linux中read用法的更多相关文章
- Linux中find用法
Linux中find用法 linux常用命令 find -name april* 在当前目录下查找以april开始的文件 find -name april* fprint file 在当前目录下查找以 ...
- linux中expr用法
名称:expr ### 字串长度 shell>> expr length "this is a test" 14 ### 数字商数 shell>> ...
- linux中nl用法
linux 中nl 命令使用 nl :添加行号打印 -b: 指定行号指定的方式,主要有两种: -b a : 表示不论是否为空行,都同样列出行号 -b t : 如果有空行,则不列出那一行 ...
- linux中sed用法
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: sed ...
- Linux中wget用法
Wget简介:Linux系统中wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTP ...
- linux中convert用法
转: 强大的convert命令 convert命令可以用来转换图像的格式,支持JPG, BMP, PCX, GIF, PNG, TIFF, XPM和XWD等类型,下面举几个例子: convert ...
- linux中xargs用法
参数代换: xargs xargs 是在做什么的呢?就以字面上的意义来看, x 是加减乘除的乘号,args 则是 arguments (参数) 的意思,所以说,这个玩意儿就是在产生某个命令的参数的意思 ...
- cut,sort,awk,sed,tr,find,wc,uniq在Linux中的用法
cut语法cut [-bn] [file]cut [-c] [file]cut [-df] [file] -b :以字节为单位进行分割.这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志.-c ...
- linux中fuser用法详解
fuser功能 fuser 可以显示出当前哪个程序在使用磁盘上的某个文件.挂载点.甚至网络端口,并给出程序进程的详细信息. fuser显示使用指定文件或者文件系统的进程ID.默认情况下每个文件名后面 ...
随机推荐
- 从输入url开始,完善前端体系架构
原文链接: https://segmentfault.com/a/1190000013662126 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系! javascript 前端 23 ...
- sqlserver2008透明书库加密
/*Title:TDE加密Author:浪客Environment:Windows Server 2008 Enterprise + SQL Server 2008 EnterpriseDescrip ...
- 二分 by zzt
#include <bits/stdc++.h> using namespace std; /* Problem description: There is an array A, the ...
- 指定某个git的版本代码拉取新的分支
在本地找到一个目录,执行 git clone http://gitlab.xxxxx.com/xxxxx/xxxxx.git cd xxxxx/ git log //找到对应版本的SHA值 例如2b1 ...
- AGC 26 D Histogram Coloring
题目 将柱子的高度离散化$\DeclareMathOperator{\dp}{dp}$ 设第 $i$ 根柱子实际高度是 $h_i$,离散化之后的高度是 $g_i$:第 $i$ 高的高度是 $H_i$, ...
- SPOJ 10628 Count on a tree(Tarjan离线 | RMQ-ST在线求LCA+主席树求树上第K小)
COT - Count on a tree #tree You are given a tree with N nodes.The tree nodes are numbered from 1 to ...
- xml的并发
网站整站的缓存方式都是依靠的DataSet的ReadXml和WriteXml的方式实现的,这种方式在访问量不是很大的网站中是一点问题都没有的(最大可承受的日IP估计在8000-15000左右),但是当 ...
- 【Begin】
迫于无奈,我想提高写博速度.我要尽量压缩每道题的题解思路.最终我选择背叛大米兔,但是我支持它.因为它的每一篇博客耗时巨大,精贵的竞赛集训时间经不起它花:可同时精致的博客会带给来浏览的Oier们更多东西 ...
- 【自己D自己】WC2019总结
好吧写着写着写成自黑文了. 这是我时隔一个月写的,寒假非常自闭,肝童年游戏赛尔号来着…… 没玩过的无视 作为一个 $BJ$ 蒟蒻,第一次飞到广州二中这么远的地方(我没出过国,去广州算是很远的一次了). ...
- [暑假集训--数论]poj2262 Goldbach's Conjecture
In 1742, Christian Goldbach, a German amateur mathematician, sent a letter to Leonhard Euler in whic ...