一:for语法
(1)语法一
for var in value1 value2 ......
do
commands
done
例1:直接赋值,循环输出1-9数字
for i in 1 2 3 4 5 6 7 8 9
do
echo $i
done
例2:命令赋值,循环输出1-9数字
for i in `seq 1 9` #seq是一个数数命令,seq 1 9代表从1开始数到9
do
echo $i
done
例3:赋值是一个字符串
for i in it\'s cool it\'s beautiful #需要转义
do
echo "word: $i"
done
(2)语法二
C式的for命令
for ((i=1;i<10;i++))
do
echo $i
sleep 1 #每秒一次
done
for循环使用多个变量
for ((a=0,b=10;a<10,b>0;a++,b--))
do
echo -e "$a\t$b"
done
无限循环\死循环
for ((;;))
do
echo "hahahaha"
done
二:循环控制语句
(1)sleep N 脚本执行到改步休眠N秒
例:倒计时计数器
echo -n "倒计时 :"
for i in `seq 9 -1 1`
do
echo -n -e "\b$i"
sleep 1
done
echo
例:监控主机存活的脚本
for ((;;))
do
ping -c1 $1 &>/dev/null #ping -c<完成次数>设置完成要求回应的次数;$1传递一个参数;&>/dev/null不输出结果
if [ $? -eq 0 ]
then
echo -e "`date +"%F %H:%M:%S:"`:$1 is \033[32m UP \033[0m" #设置时间,UP的颜色
else
echo -e "`date +"%F %H:%M:%S:"`:$1 is \033[32m down \033[0m"
fi
sleep 5 #脚本节奏控制,生产环境建议1分钟以及以上
done
(2)continue跳出循环(跳出本次循环)
例:要求输出12346789
for ((i=1;i<10;i++))
do
if [ $i -eq 5 ];then
#本次循环到此结束,可以开始下一次循环
continue
fi
echo $i
done
结果:
[root@localhost shell]# bash test8.sh 192.168.10.30
1
2
3
4
6
7
8
9
(3)break跳出循环(后续循环也跳出)
例1:要求用户输入一个字母,当输入M的时候退出
for ((;;))
do
read -p "char: " ch
if [ $ch == 'M' ]
then
#终止本次循环
break
else
echo "你输入的字符是:$ch"
fi
done
例2:内外循环
for((i=1;i<100;i++))
do
echo "#loop $i"
for ((;;))
do
echo "haha"
break #如果改成break 2,则执行一次直接跳出整个循环【内循环为1,外为2】
done
sleep 3
done