shell的for while读取文件写法和区别

shell的for while读取文件写法和区别,第1张

常见的while和for循环的写法,大概有如下几种:

while循环:会将每行的内容读入到line变量,当while出现空行,用if判断字符=0, contiun

for循环高斗纳: 将读入的内容以IFS(shell中的环境变量,Internal Field Seperator,字段分隔符)为界分隔, 然后将各个分销枣隔开的内容,逐一读入变量line。本质上说,for循环读取的是字段,只不过可以设置IFS为\n这样能够逐行读取。

如果希望for处理文件按回车分隔,则需重新定义分隔符 IFS:内部字段分隔符 IFS=$'\n'

示例戚没1

示例2

Shell 脚本一直以来不是很入门,很多时候就是用到再查,发现自己有几个重复用比较高的点,还是记姿腊族录一下,至少查的时候能少费点功夫~~

(1)列表for循环

Shell支持使用略写的计数方式,如{1..10},表示迹弊1到10的整数数字;

Shell还支持安规定的步数进行跳跃的方式实现列表for循环,例如计算1~100之内所有奇数的和。

i 按照2的增量增长,一直到增长到100。局埋即实现100内奇数加和。还可以使用seq命令实现按2递增来计算1..100内的所有奇数之和。 for i in $(seq 1 2 100) ,seq 表示起始值为1,增量为2,结束条件值为100。

for循环除了数字列表,还可以生成字符串列表,如列出当前文件夹下的所有文件:

还可以传递命令行参数

$#表示传递的参数的个数;$@表示参数的列表。

(2) 类C风格的for循环

也称之为计次循环。 切记使用的是双括号。

上面的计算100以内奇数的和可以使用类C的for循环实现

通过for循环实现九九乘法表

我在写Shell脚本时遇到了这样一个问题。

需求:从文册逗颤件中逐行遍历然后输出。

诶?

为什么和我源文件的行数不一致呢?

后来查资料发现:

bash shell会将下列字符当作字段分隔符:空格、制表符、换行符

如果州败我们想忽略掉这些分隔符,需要设IFS的变量值。

在for循环前加上这个IFS赋值 *** 作就可以了

看,现在输出的结果和我们txt文件中的格式是一样的了。

但是这样赋值会有问题,如果脚本中其他方法也用到指慧了for循环,可能影响其他for循环的输出结果,那我们可以用这种方式给IFS赋值


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12227820.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存