20.10 for循环
语法格式:
for 变量 in 条件(值范围); do 语句 ;done
示例:计算1到10的累加和
#!/bin/bash
sum=0
for i in 'seq 1 10' //seq 1 10 为结果集,是以空格号或回车为间隔遍历值。
do
sum=$[$sum+$i]
done
echo $sum
示例:针对文件的循环,遍历每个ls的结果值判断是否为目录,然后ls该目录。
#!/bin/bash
cd /etc/
for a in 'ls /etc/' //a是ls /etc/ 结果里的值每个遍历,是以空格为间隔的
do
[-d $a] && ls $a
done
示例:/lgs/ 目录下 touch 1 2 touch 3\ 4.txt (文件名是3 4.txt,脱义字符后是空格)
for i in 'ls ./'
do
echo $i
done
##执行结果是
1
2
3
4.txt //会把文件3 4.txt 当成两个文件 3和 4.txt。验证出是以空格为间隔遍历条件里的值
20.11/20.12 while循环
语法:
while 条件 ;do 语句; done
示例:
#!/bin/bash //为了让脚本不意外中止,用screen中运行脚本
while : //while true或者while 1的意思,表示永久循环
do
load='w|head -1|awk -F 'load average: ' '{print $2}' |cut -d. -f1 '
if[ $load -gt 10 ]
then
/usr/local/mail.py xxx@xxx "load high" "$load"
fi
sleep 30 //30秒检查一次
done
示例:
#!/bin/bash
while :
do
read -p "please input a number: " n
if[ -z $n ]
then
echo "你需要输入东西"
continue //继续执行下一次的循环
fi
n1='echo $n|sed 's/[0-9]//g''
if [ ! -z $n1 ]
then
echo "你只能输入数字"
continue
fi
break //跳出循环体
done
echo $n
20.13 break跳出循环
#!/bin/bash
for i in 'seq 1 10'
do
echo $i
if[ $i -eq 3 ]
then
break //跳出所有循环
fi
echo $i //i=3时,这句不执行了,因为上面跳出for循环体了
done
echo aaaaaa
##结果
1
1
2
2
3
aaaaaa
20.14 continue结束本次循环
忽略本次循环continue之下的语句,直接进入下一次循环
#!/bin/bash
for i in 'seq 1 10'
do
echo $i
if [ $i==3 ]
then
continue //直接进入i=4的循环
fi
echo $i
done
echo$i
##结果
1
1
2
2
3
4
4
5
5
5
20.15 exit退出整个脚本
#!/bin/bash
for i in 'seq 1 5'
do
echo $i
if [ $i==3 ]
then
exit //i=3,直接不执行以后所有的代码,退出脚本
fi
echo $i
done
echo aaaaaa //i=3不执行该语句
##结果
1
1
2
2
3
来源:oschina
链接:https://my.oschina.net/u/3804114/blog/1854818