三、分隔符
举例:读取文件,但是文件中有空格
解决办法:
还有个办法比较简单的,就是使用while read在while的示例3中有介绍,这个不涉及分隔符,但是用for写无法避免
举例:将五个环境分行输出
[root@localhost sh]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#!/bin/bash IFS_OLD=$IFS IFS=':' for i in $PATH do echo $i done IFS=$IFS_OLD
四、双循环
外层循环每执行一次,内层循环都要全部执行完毕,下一次外层循环才能再执行
内层循环看作是外层循环的一个命令语句
#!/bin/bash #双层循环测试 for ((i=1;i<=5;i++)) do echo "outer loop: $i" #外层循环 for ((j=1;j<=5;j++)) do echo " inter loop: $j" #内层循环 done done
五、退出循环
5.1 exit
外循环1次,内循环3次
5.2 break
外循环5次,内循环3次
5.3 continue
外循环五次,内循环4次
跳过j等于3的循环,其他的循环不影响
在for循环中比较好用,while中慎用
5.4 死循环
while循环中一定要注意迭代(自增)的方式
六、总结
for
给了已知的取值列表,使用for循环是首选
循环操作一般会首选for循环
for(())
for i in ...
循环的分隔符 IFS是空格,制表符\t 换行符\n
while
需要满足某种条件时可以使用,不知道循环次数时可以配合配合退出语句(break,exit,continue)实现循环操作
until
不满足条件的时候要已知循环时使用
多线程
{
....
}&
wait
读取文件
法一
while read 变量名
do
....
done < 文件名
法二
cat 文件 |while read 变量名
do
....
done
退出循环
exit n(0-255)退出shell脚本进程,并且可以返回指定状态码,执行exit后脚本后面的所有语句都不执行
break 跳出当前的循环体,去执行循环后面的语句(默认跳出单层循环),break 2 跳出两层循环
continue 中止某次循环的执行,但不会完全中止整个循环(跳过这次循环);while until循环中使用要慎重,如果continue放在迭代语句前面会造成死循环