for循环
语法:for 变量名 in 条件; do …; done
案例1,求和
#!/bin/bash
sum=0
for i in seq 1 100
do
sum=$[$sum+$i]
echo $i
done
echo $sum
这是计算从1到100总和的脚本。
其中sum变量赋一个值为0,[$sum+$i]是赋值语句,做加减法,也是核心语句。这里中括号不用加空格
案例2,文件循环
文件列表循环
#!/bin/bash
cd /etc/
for a in ls /etc/
do
if [ -d $a ]
then
ls -d $a
fi
done
这是讲/etc/目录下的目录都查询一遍
有时候我们会遇到这种情况,在目录下有些文件名中有空格或者回车键,这样在写脚本的时候
for i in ‘ls ./’;do echo $i ; done
会出现以分隔符分割的文件名
while循环
语法 while 条件; do … ; done
案例1
#!/bin/bash
while :
do
load=w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1
if [ $load -gt 10 ]
then
/usr/lib/zabbix/alertscripts/mail.py 2008llt@163.com "load higt" "$load"
fi
sleep 30
done
这是一个监控脚本,这个脚本是每隔半分钟检查一下系统的负载,大于10的时候就发邮件给收件人。
其中while :是死循环的意思
load=w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1
是将系统的负载赋值到load这个变量中。
它的意思是w,查看系统负载
head -1选取第一行
awk -F 'load average: ' '{print $2}'以load average:为分隔符,并且打印第二段
cut -d. -f1然后再以.为分隔符,打印第一段
/usr/lib/zabbix/alertscripts/mail.py 2008llt@163.com "load higt" "$load"发送邮件,第一段里面写主题,第二段中写内容。
sleep 30 间隔30秒
案例2
#!/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 $n
这是让用户输入东西的脚本,如果输入不是系统想要的,那他就会不停的让你输入。这个脚本的重点是continue(继续重新执行)和break(退出脚本循环)
break跳出循环
#!/bin/bash
for i in seq 1 5
do
echo $i
if [ $i -eq 3 ](在这里,如果我们比较数字的话,我们需要用-eq去比较,如果是字符串,我们要用==去比较)
then
break
fi
echo $i
done
echo aaaaa
这个脚本的意思是如果当$i等于3的时候,就打印出aaaaa。
[root@linletao-001 shell]# sh -x break.sh
++ seq 1 5
- for i in '
seq 1 5
' - echo 1
1 - '[' 1 -eq 3 ']'
- echo 1
1 - for i in '
seq 1 5
' - echo 2
2 - '[' 2 -eq 3 ']'
- echo 2
2 - for i in '
seq 1 5
' - echo 3
3 - '[' 3 -eq 3 ']'
- break
- echo aaaaa
aaaaa
当匹配到3的时候,与条件相等。break跳出来,打印aaaaa
continue结束本次循环
忽略continue之下的代码,直接进行下一次循环
#!/bin/bash
for i in seq 1 5
do
echo $i
if [ $i == 3 ]
then
continue
fi
echo $i
done
echo $i
[root@linletao-001 shell]# sh break.sh
1
1
2
2
3
4
4
5
5
aaaaa
在匹配了条件后,它依然往下进行,这就是continux的作用。
exit退出整个脚本
#!/bin/bash
for i in seq 1 5
do
echo $i
if [ $i == 3 ]
then
exit(直接退出这个脚本)
fi
echo $i
done
echo $i
[root@linletao-001 shell]# sh exit.sh
1
1
2
2
3
满足条件见后自动退出,不再向下执行
转载于:https://blog.51cto.com/13067688/2122653