Linux下Shell的for循环语句示例(2)

将这个语句加入到脚本中,告诉bash shell在数据值中忽略空格和制表符。

#!/bin/bash # reading values from a file file="states" IFS=$'\n' for state in $(cat $file) do echo "Welcome $state" done

执行结果:

Welcome
Welcome Hello World
Welcome Linuxmi com
Welcome linuxidc.net Linux公社

一个可参考的安全实践是在改变IFS之前保存原来的IFS值,之后再恢复它。

实现:

IFS.OLD=$IFS
IFS=$'\n'
<在代码中使用新的IFS值>
IFS=$IFS.OLD

这就保证了在脚本的后续操作中使用的是IFS的默认值。

遍历一个文件中用冒号分隔的值:

IFS=:

如果要指定多个IFS字符,只要将它们在赋值行串起来就行。

IFS=$'\n':;"

这个赋值会将换行符、冒号、分号和双引号作为字段分隔符。如何使用IFS字符解析数据没有任何限制。

用通配符读取目录

#!/bin/bash for file in /home/linuxidc/linuxidc.com/*; do echo $file is file path \! ; done

执行结果:

linuxidc@linuxidc:~/linuxidc.com$ ./linuxidc.sh
/home/linuxidc/linuxidc.com/03.jpg is file path !
/home/linuxidc/linuxidc.com/123.jpg is file path !
/home/linuxidc/linuxidc.com/123.png is file path !
/home/linuxidc/linuxidc.com/2.avi is file path !
/home/linuxidc/linuxidc.com/amp is file path !
/home/linuxidc/linuxidc.com/atom-amd64.deb is file path !
/home/linuxidc/linuxidc.com/car.jpg is file path !
/home/linuxidc/linuxidc.com/car.png is file path !
/home/linuxidc/linuxidc.com/chenduling.jpg is file path !
/home/linuxidc/linuxidc.com/com.testdemo.java is file path !
/home/linuxidc/linuxidc.com/DarkPicDir is file path !
/home/linuxidc/linuxidc.com/data is file path !

Linux下Shell的for循环语句示例

类C风格for循环的语法格式

for((expr1; expr2; expr3)) do command command ... done

有些部分并没有遵循bash shell标准的for命令:
*变量赋值可以有空格
*条件中的变量不以美元符开头
*迭代过程的算式为用expr命令格式

ex9、输出前6个正数

#!/bin/bash #使用类C风格for循环输出1~6 for ((integer = 1; integer <= 6; integer++)) do echo "$integer" done

执行如下:

Linux下Shell的for循环语句示例

尽管可以使用多个变量,但你只能在for循环中定义一种条件。

#!/bin/bash for ((x=1,y=8;x<=8;x++,y--)) do echo "$x - $y" done

执行如下:

Linux下Shell的for循环语句示例

使用类C风格for循环要注意以下事项:

a.如果循环条件最初的退出状态为非0,则不会执行循环体
b.当执行更新语句时,如果循环条件的退出状态永远为0,则for循环将永远执行下去,从而产生死循环
c.Linux shell中不运行使用非整数类型的数作为循环变量
d.如果循环体中的循环条件被忽略,则默认的退出状态为0
e.在类C风格的for循环中,可以将三个语句全部忽略掉,下面是合法的for循环

#!/bin/bash for((; ; )) do echo "hello world " done

Linux下Shell的for循环语句示例

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/12010.html