while read line - [linux学习]

循环中的重定向
或许你应该在其他脚本中见过下面的这种写法:
while read line
do
       …
done < file
刚开始看到这种结构时,很难理解< file是如何与循环配合在一起工作的。因为循环内有很多条命令,而我们之前接触的重定向都是为一条命令工作的。这里有一个原则,这个原则掌握好了,这个问题就很简单了:
对循环重定向的输入可适用于循环中的所有需要从标准输入读取数据的命令;
对循环重定向的输出可适用于循环中的所有需要向标准输出写入数据的命令;
当在循环内部显式地使用输入或输出重定向,内部重定向覆盖外部重定向。
上面的while结构中,read命令是需要从标准输入中读取数据的。我们来详细了解一下read命令的用法吧,这个命令是shell脚本中使用频率最高的命令之一。
read
先来看一下read的命令语法:
read arg1 arg2 arg3 arg4 …
read是一个用来赋值的命令,它需要从标准输入获得值,然后把这些值按位置依次赋值给变量arg1、arg2、arg3、arg4…,输入的时候以空格作为字段分隔符。
read的一个最大特性是可以在脚本中产生交互,因为它从标准输入读取数据。read之所以很常用,一是因为我们经常需要赋值,二是因为它可以交互,三是read能够一次给多个变量赋值。
$ read host ip name
linux 10.0.0.1 licong
$ echo $host $ip $name
linux 10.0.0.1 licong
$
可以看到,linux、10.0.0.1、licong分别被赋值给了变量host、ip和name。再看:
$ read host ip
linux 10.0.0.1 licong
$ echo $host
linux
$ echo $ip
10.0.0.1 licong
$
当我们输入的字段比变量数目多时,最后一个变量的值将不只一个字段,而是所有剩余的内容;当输入字段比变量数少时,多余的变量将是空值,你可以自己试试。现在我们再来看
while read line
do
       …
done < file
read通过输入重定向,把file的第一行所有的内容赋值给变量line,循环体内的命令一般包含对变量line的处理;然后循环处理file的第二行、第三行。。。一直到file的最后一行。还记得while根据其后的命令退出状态来判断是否执行循环体吗?是的,read命令也有退出状态,当它从文件file中读到内容时,退出状态为0,循环继续惊醒;当read从文件中读完最后一行后,下次便没有内容可读了,此时read的退出状态为非0,所以循环才会退出。
另一种也很常见的用法:
command | while read line
do
    …
done
如果你还记得管道的用法,这个结构应该不难理解吧。command命令的输出作为read循环的输入,这种结构长用于处理超过一行的输出,当然awk也很擅长做这种事。
  • 12
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: linux while read line 是一个循环结构,用于读取文件中的每一行并进行处理。其中,while 是一个循环关键字,read 是一个命令,用于读取文件中的一行,line 是一个变量,用于存储读取到的每一行内容。在循环体中,可以对 line 变量进行操作,例如输出、处理等。当文件中的所有行都被读取完毕后,循环结束。 ### 回答2: "while read line"是在Linux中经常用来读取文件内容或者标准输入的一种循环方式。其原始形式为: while read line do command done < filename 其中,filename为要读取的文件名称,而command则是需要执行的具体指令,循环会一行一行地读取filename的内容并将每一行分别赋值给line,然后在循环体中执行相应的指令。 这种循环方式的优点在于可读性高,并且适用于大多数文本文件的读取场景,可以很方便地实现一些批处理、数据处理或者文件遍历等任务。 此外,"while read line"还可以配合管道符使用,实现对标准输入(即控制台输入)的读取,如: ps -ef | while read line do echo $line done 上述命令实现了读取系统中所有进程信息并将其输出到控制台的效果。由于读取标准输入时并没有输入文件名,因此不需要在"while read line"后面跟上"< filename"语句。 总之,"while read line"虽然看起来比较简单,但实际上其应用场景广泛、功能强大,并且能够很好地提高shell编程的效率和可读性。 ### 回答3: Linux while read line 是一个经典的 Shell 编程技巧,其主要用途是逐行读取文本文件的内容并进行一些处理。 在 Bash 或其他 Shell 中,可以使用 while read line 命令来实现该功能。该命令的一般语法如下: ``` while read line do # 处理当前行的内容 done < 文件名 ``` 其中,while read line 循环会依次读取文件的每一行,并将当前行的内容储存在变量 line 中。为了读取指定的文件,需要使用重定向符号 < 将文件名传递给 while 命令。 在处理当前行的内容时,可以使用 Shell 的各种字符串处理命令来对行进行处理。例如,可以使用 sed 命令删除行中的某些字符,使用 awk 命令提取某些字段等。 此外,可以在循环中添加一些条件判断语句,以实现更加灵活的文件处理功能。例如,可以在每行读取完成后进行一些验证,以确保该行符合要求等。 总之,Linux while read line 是一种实用而灵活的文件处理技巧,可以满足各种文件读取和处理需求。熟练掌握该技巧将对 Shell 编程和系统管理工作都有很大的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值