shell脚本while read line的使用

#### 题目要求
计算文档a.txt中每一行中出现的数字个数并且要计算一下整个文档中一共出现了几个数字。例如a.txt内容如下:
12aa*lkjskdj
alskdflkskdjflkjj
我们脚本名字为 ncount.sh, 运行它时:
bash ncount.sh a.txt
输出结果应该为:
2
0
sum:2

#### 参考答案
```

#!/bin/bash
sum=0
while read line
do
line_n=`echo $line|sed 's/[^0-9]//g'|wc -L`
echo $line_n
sum=$[$sum+$line_n]
done < $1
echo "sum:$sum"

  

当我们输入的字段比变量数目多时,最后一个变量的值将不只一个字段,而是所有剩余的内容;当输入字段比变量数少时,多余的变量将是空值,你可以自己试试。现在我们再来看
while read line
do
       …
done < file
r ead通过输入重定向,把file的第一行所有的内容赋值给变量line,循环体内的命令一般包含对变量line的处理;然后循环处理file的第二行、第三行。。。一直到file的最后一行。还记得while根据其后的命令退出状态来判断是否执行循环体吗?是的,read命令也有退出状态,当它从文件file中读到内容时,退出状态为0,循环继续惊醒;当read从文件中读完最后一行后,下次便没有内容可读了,此时read的退出状态为非0,所以循环才会退出。
另一种也很常见的用法:
command | while read line
do
    …
done
如果你还记得管道的用法,这个结构应该不难理解吧。command命令的输出作为read循环的输入,这种结构长用于处理超过一行的输出,当然awk也很擅长做这种事。

 

转载于:https://www.cnblogs.com/weifeng1463/p/10323331.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Linux shell脚本中,while循环用于在满足某个条件的情况下重复执行一段代码。while循环的语法格式如下: ``` while \[ condition \] do # 循环执行的代码 done ``` 其中,`condition`是一个条件表达式,只有当该条件为真时,循环中的代码才会执行。循环执行的过程是,先判断条件是否为真,如果为真,则执行循环中的代码,然后再次判断条件是否为真,如果为真,则再次执行循环中的代码,以此类推,直到条件为假时,循环结束。 举例来说,如果我们有一个脚本a.sh,其中使用while循环输出数字1到5,脚本内容如下: ``` #!/bin/bash i=1 while \[ $i -le 5 \] do echo "$i" let i++ done ``` 执行该脚本,会输出数字1到5,即执行结果为:1 2 3 4 5。\[1\] 另外,我们还可以使用while循环从文件中读取内容。例如,我们有一个文件province.txt,其中包含一些省份名称,我们可以使用while循环逐行读取该文件的内容并进行处理,脚本内容如下: ``` #!/bin/bash filePath=`pwd` while read line do echo ${line} done < ${filePath}/province.txt ``` 执行该脚本,会逐行输出文件province.txt中的内容。\[2\] 总结来说,while循环是一种在满足条件的情况下重复执行代码的结构,可以用于各种不同的场景,根据具体需求来灵活运用。 #### 引用[.reference_title] - *1* *3* [Linux系统Shell脚本第三章:for、while循环及脚本实操](https://blog.csdn.net/weixin_67287151/article/details/128538458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Shell脚本while循环语句应用](https://blog.csdn.net/zhangbeizhen18/article/details/130913286)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值