来源:https://blog.csdn.net/Powerful_Fy

for、while循环

for循环语法:for 变量名 in 条件; do …; done

示例一:打印1-100的数字并求和

#!/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)

seq10 -2 1:打印结果10,8,6,4,2(倒序打印步长为负)

seq -w 1 10:打印结果01,02,03,04,05,06,07,08,09,10(-w 表示等宽)

示例二:打印指定目录下的文件

#!/bin/bash
cd /etc
for i in `ls /etc`
do
	if [ -f $i ]
	then
		ls -l $i
	fi
done

while循环语法:while 条件; do … ; done

示例一:平均1分钟负载大于5时,发送邮件

#!/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

示例二:判断输入内容是否为空或包含非数字

#!/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、continue、exit

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)

11-21 09:24
查看更多