for循环:
语法:
for 变量名 in 条件
do
command
done
#for循坏的条件集合,以空格作为分隔符,分割每一个条件。
例子:
#!/bin/bash
#求和1之100
sum=0
for in in `seq 1 100`
do
sum=$[$sum+$i]
done
echo $sum
#!/bin/bash
#查找/etc/目录下的目录,并长格式显示
cd /etc
for i in `ls /etc/`
do
[ -d $i ] && ls -d $i
done
while循环:
语法:
while 循环条件
do
command
done
#当循环条件为 1或true或 “:”,表示死循环。
例子:
#!/bin/bash
#每30S监控系统负载,当大于10,发送邮件,假设邮件脚本在/usr/local/sbin/mail.py
while true
do
load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d "." -f 1`
[ $load -gt 10 ] && /usr/local/sbin/mail.py "load high" "$load"
sleep 30
done
#!/bin/bash
#让用户输入数字,检测若没输入字符,提示用户输入;若用户输入非数字,提示用户输入数字;直至输入数字后退出循坏
while :
do
read -p "Please input a number: " n
if [ -z "$n" ]
then
echo "you need input number"
continue
#执行continue后,跳出本次循环,下面不执行,进行下一次循环
fi
n1=`echo $n|sed 's/[0-9]//g'`
if [ -n "$n1" ]
then
echo "you need input numbers."
continue
fi
break
#执行break后,退出此while循环
done
echo $n
break跳出循环:
常用于循环语句中,跳出整个循环,结束循环
例子:
#!/bin/bash
for i in `seq 1 5`
do
if [ $i -eq 3 ]
then
break
else
echo $i
fi
done
echo aaaaa
结果:
#sh break.sh
++ seq 1 5
+ for i in '`seq 1 5`'
+ '[' 1 -eq 3 ']'
+ echo 1
1
+ for i in '`seq 1 5`'
+ '[' 2 -eq 3 ']'
+ echo 2
2
+ for i in '`seq 1 5`'
+ '[' 3 -eq 3 ']'
+ break
+ echo aaaaa
aaaaa
continue结束本次循环:
常用于循环语句中,不执行continue后面语句,直接重新开始下一次循坏
#!/bin/bash
for i in `seq 1 5`
do
if [ $i -eq 3 ]
then
continue
else
echo $i
fi
done
echo aaaaa
结果:
#sh continue.sh
++ seq 1 5
+ for i in '`seq 1 5`'
+ '[' 1 -eq 3 ']'
+ echo 1
1
+ for i in '`seq 1 5`'
+ '[' 2 -eq 3 ']'
+ echo 2
2
+ for i in '`seq 1 5`'
+ '[' 3 -eq 3 ']'
+ continue
+ for i in '`seq 1 5`'
+ '[' 4 -eq 3 ']'
+ echo 4
4
+ for i in '`seq 1 5`'
+ '[' 5 -eq 3 ']'
+ echo 5
5
+ echo aaaaa
aaaaa
exit退出整个脚本:
用于脚本中时,直接退出脚本,可定义退出时的返回值
#!/bin/bash
for i in `seq 1 5`
do
if [ $i -eq 3 ]
then
exit 2
else
echo $i
fi
done
echo aaaaa
结果:
#sh exit.sh
++ seq 1 5
+ for i in '`seq 1 5`'
+ '[' 1 -eq 3 ']'
+ echo 1
1
+ for i in '`seq 1 5`'
+ '[' 2 -eq 3 ']'
+ echo 2
2
+ for i in '`seq 1 5`'
+ '[' 3 -eq 3 ']'
+ exit 2
#echo $?
2