来源:https://blog.csdn.net/Powerful_Fylinux
for循环语法:for 变量名 in 条件; do …; donebash
示例一:打印1-100的数字并求和.net
#!/bin/bash sum=0 for i in `seq 1 100` do sum=$[$sum+$i] echo $i done echo $sum
seq1 2 10:打印结果1,3,5,7,9(2表示步长,打印结果间隔为2)code
seq10 -2 1:打印结果10,8,6,4,2(倒序打印步长为负)blog
seq -w 1 10:打印结果01,02,03,04,05,06,07,08,09,10(-w 表示等宽)get
示例二:打印指定目录下的文件input
#!/bin/bash cd /etc for i in `ls /etc` do if [ -f $i ] then ls -l $i fi done
while循环语法:while 条件; do … ; doneit
示例一:平均1分钟负载大于5时,发送邮件for循环
#!/bin/bash while : do load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d . -f1` if [ $load -gt 5 ] then d=`date +%F_%T` top -nb1|mail -s "$d load is high: $load" asnfy@qq.com fi sleep 30 done
示例二:判断输入内容是否为空或包含非数字class
#!/bin/bash while : do read -p "Please input a number: " n if [ -z "$n" ] then echo "you need input sth." continue fi n1=`echo $n|sed 's/[0-9]//g'` if [ -n "$n1" ] then echo "you just only input numbers." continue fi break done echo "you input number is $n"
#若是输入的内容为空为包含非数字,continue跳出从新执行,不然break结束循环
补充:
当使用for遍历一个文件中的每行内容时(for i in `cat test`),若是某行中有一个或多个空格,这行的内容就会被当作两行或多行打印,为了不这种状况能够使用while来循环输出文件中的每行内容
示例:
#!/bin/bash cat test.txt|while read i do echo $i done
#使用while遍历文件中的内容,即便某行有空格,也会被正常打印
break:直接结束循环
#!/bin/bash for i in `seq 1 5` do echo "第一次输出:$i" if(($i==3)) then break fi echo "第二次输出:$i" done echo "循环结束"
执行结果:
[root@linux ~]# sh a.sh 第一次输出:1 第二次输出:1 第一次输出:2 第二次输出:2 第一次输出:3 循环结束
continue:忽略后面的代码,重新开始循环
#!/bin/bash for i in `seq 1 5` do echo "第一次输出:$i" if(($i==3)) then continue fi echo "第二次输出:$i" done echo "循环结束"
执行结果:
[root@linux ~]# sh a.sh 第一次输出:1 第二次输出:1 第一次输出:2 第二次输出:2 第一次输出:3 第一次输出:4 第二次输出:4 第一次输出:5 第二次输出:5 循环结束
注意:循环支持嵌套,若是一个循环中嵌套了多个循环,break或continue只能做用于所在的某个循环中
exit:直接退出脚本
#!/bin/bash for i in `seq 1 5` do echo "第一次输出:$i" if(($i==3)) then exit fi echo "第二次输出:$i" done echo "循环结束"
执行结果:
[root@linux ~]# sh a.sh 第一次输出:1 第二次输出:1 第一次输出:2 第二次输出:2 第一次输出:3
#循环外的echo语句没有输出,当脚本中遇到exit,会直接退出,后面全部内容都再也不执行
补充: 当脚本遇到exit直接退出后,echo $? 查看执行结果会显示0,表示执行成功,因此通常使用exit会在后面加上指定的非0数字,方便调用结果(好比:exit 5)