一、for 循环
1、语法:for 变量名in条件;do...;done
计算1到100的和
#!/bin/bash
sum=0
for i in {1..100} #表示1到100
do
sum=$[$sum+$i]
echo $sum
done
2、文件列表循环
#!/bin/bash
cd /etc/
for i in `ls /etc/`
do
# [ -d $i ] && ls $i #等同于下面的if语句
if [ -d $i ]
then
echo $i
ls $i
fi
done
3、for 循环一个目录时,是以空格为区分的。需要注意。
[root@localhost test]# for i in `ls ./`;do echo $i;done
1
2
3
4.txt
[root@localhost test]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 4月 19 21:36 1
-rw-r--r--. 1 root root 0 4月 19 21:36 2
-rw-r--r--. 1 root root 0 4月 19 21:36 3 4.txt
二、while 循环
1、语法: while条件;do...,done
检查系统负载
#!/bin/bash
while: while 1, while true #表示真,为死循环
do
load=`w |head -n1 |awk -F 'load average: ' '{print $2}' |cut -d. -f1 |sed 's/ //'` #首先w 命令, 然后 awk 以 load average: 为分隔符,抓取$2 ,cut 以. 为分隔符,获取第一个字符,
if [ $load -gt 10 ] #sed 删除空格
then
/usr/local/sbin/mail.py ****@163.com "load high" "$load"
fi
sleep 30
done
[root@localhost test]# sh -x 1.sh
+ true
++ head -n1
++ awk -F 'load average: ' '{print $2}'
++ cut -d. -f1
++ w
+ load=0
+ '[' 0 -gt 10 ']'
+ sleep 30
2、while 循环 交互、
#!/bin/bash
while :
do
read -p "please input a number: " n
if [ -z "$n" ]
then
echo "please again input a number"
continue #continue 继续之前的操作,及输入数字
fi
n1=`echo $n|sed 's/[0-9]//'` #删除数字,判断n1 是否为纯数字
if [ -n "$n1" ]
then
"echo you only input a number"
continue
fi
break #如果结果是真,则跳出当前循环
done
echo $n
[root@localhost test]# sh -x 2.sh
+ :
+ read -p 'please input a number: ' n
please input a number: 2w
+ '[' -z 2w ']'
++ echo 2w
++ sed 's/[0-9]//g'
+ n1=w
+ '[' -n w ']'
+ echo 'you only input a number'
you only input a number
+ continue
+ :
+ read -p 'please input a number: ' n
please input a number: 2
+ '[' -z 2 ']'
++ echo 2
++ sed 's/[0-9]//g'
+ n1=
+ '[' -n '' ']'
+ break
+ echo 2
2
三、break 跳出循环
1、案例
#!/bin/bash
for i in `seq 5`
do
echo $i
if [ $i == 3 ]
then
break #break 条件成立,结果为真,则结束当前的for循环,后面的显示命令还继续执行
fi
echo $i
done
echo ok
[root@localhost test]# sh 3.sh
1
1
2
2
3
OK
四、continue 结束本次循环
1、案例
#!/bin/bash
for i in `seq 5`
do
echo $i
if [ $i == 3 ]
then
continue #只是结束本次循环,其他循环还要继续
fi
echo $i
done
[root@localhost test]# sh 3.sh
1
1
2
2
3
4
4
5
5
五、exit 退出整个脚本
1、案例
#!/bin/bash
for i in `seq 5`
do
echo $i
if [ $i == 3 ]
then
exit #直接退出整个脚本
fi
echo $i
done
echo OK
[root@localhost test]# sh 3.sh
1
1
2
2
3
[root@localhost test]# echo $?
2