循环
一、while循环
1.while语法
while循环只有条件成立,则就会反复执行循环体里面的命令,直到条件为假时,才会结束
无限的循环下去,死循环。
while 条件测试
do
循环体
done
三种写法
while true 或者 :
do
循环体
done
while read line
do
循环体
done < file.txt
while [ 条件判断 ]
do
循环体
done
2.结束循环
1)break
!/bin/bash
count=0
while [ $count -lt 5 ] # 1 < 5
do
if [ $count -eq 3 ];then
break
fi
echo $count
let count++ # 3
done
break 之后的命令不再运行
2)循环体中把某个值改掉,让条件为假
[root@Centos7 ~]# cat test.sh
!/bin/bash
count=0
while [ $count -lt 3 ]
do
echo 1111
count=100
echo 2222
echo 3333
done
3) continue
!/bin/bash
count=0
while [ $count -lt 5 ] # 1 < 5
do
if [ $count -eq 3 ];then
continue
fi
echo $count
let count++ # 3
done
continue 结束本次循环进入下一轮,之后的命令还会运行
3)嵌套多层循环
不推荐使用,脚本还是越简洁越好
break结束嵌套多层的循环
while 条件1
do
while 条件2
do
while 条件3
do
break 3
done
# break
done
# break
done
把条件改为false
tag=true
while $tag
do
while $tag
do
while $tag
do
tag=false
done
done
done
3.写一个登入认证脚本(仅3次)
!/bin/bash
db_name="jkz"
db_pass="111"
count=0
while [ $count -lt 3 ]
do
read -p "请输入你的用户名>>> " username
read -p "请输入你的密码>>> " password
if [ "$db_name" == "$username" -a "$db_pass" == "$password" ];then
echo "login successful"
while true;do
read -p "输入命令>>> " ll
$ll
if [ "$ll" == "q" ];then
break 1
elif [ "$ll" == "qq" ] ;then
break 2
fi
done
elif [ -z "$username" -o -z "$password" ];then
echo "用户或密码不能为空"
let count++
else
echo "user or password error"
let count++
if [ $count -eq 3 ];then
echo "只能输入3次"
fi
fi
echo "--------------------------"
done
4.访问网站脚本,三次出错就报警
!/bin/bash
[ $# -ne 1 ] && echo "只能输入一个参数" && exit
url=$1
count=0
while true
do
echo "=========>$count"
if [ $count -eq 3 ];then
echo "报警:$url is dead"
break
fi
wget --timeout=1 --tries=3 $url -q
if [ $? -eq 0 ];then
echo "$url is ok"
break
else
let count++
fi
done
5.动态监测系统状态
while :;do free;sleep 0.5;clear;done
6. 99乘法表
!/bin/bash
a=1
while [ $a -le 9 ];do
b=1
while [ $b -le $a ];do
echo -en "${b}x${a}=$(($a*$b))\t"
let b++
done
echo ""
let a++
done
二.until循环
条件为false就执行循环体代码,条件变为true循环结束,与while相反
until 条件
do
命令1
命令2
命令3
...
done
示例
!/bin/bash
count=0
until [ $count -eq 5 ]
do
echo $count
let count++ # 5
done
- 99乘法表
!/bin/bash
a=1
until [ $a -gt 9 ]
do
b=1
until [ $b -gt $a ]
do
echo -en "${b}x$a=$(($a*$b))\t"
let b++
done
echo ""
let a++
done
三、for循环
1.shell风格
for i in 值1 值2 值3
do
echo $i
done
示例
!/bin/bash
for i in ls /scripts/day05
do
mv $i ${i/txt/sh}
done
!/bin/bash
for i in {1..254}
do
ping -c1 10.0.0.$i &>/dev/null
[ $? -eq 0 ] && echo 10.0.0.$i
done
2.C风格
!/bin/bash
for ((i=0;i<3;i++))
do
echo "命令1"
echo "命令2"
echo "命令3"
done
3.break与continue在for循环中的应用
[root@Centos7 ~]# cat 9.sh
!/bin/bash
for i in {A..Z}
do
if [ $i == "C" ];then
# break
continue
fi
echo $i
done
[root@Centos7 ~]#
4.统计文件夹下所有的文件类型
!/bin/bash
[ $# -ne 1 ] && echo "必须传入一个参数" && exit
regular=0
dir=0
link=0
other=0
for fname in ls $1
do
if [ -L "$1/$fname" ];then
let link++
elif [ -f "$1/$fname" ];then
let regular++
elif [ -d "$1/$fname" ];then
let dir++
else
let other++
fi
done
echo "标准文件个数:$regular"
echo "目录文件个数:$dir"
echo "软连接文件个数:$link"
echo "其他文件个数:$other"
5. 99乘法表
!/bin/bash
for a in {1..9}
do
for b in $(seq 1 $a)
do
echo -en "${b}x$a=$(($a*$b))\t"
done
echo "" #空行 换行符
done
第二种
!/bin/bash
a=1
while [ $a -le 9 ];do
b=1
while [ $b -le $a ];do
echo -en "${b}x${a}=$(($a*$b))\t"
let b++
done
echo ""
let a++
done
第三种
!/bin/bash
a=1
until [ $a -gt 9 ]
do
b=1
until [ $b -gt $a ]
do
echo -en "${b}x$a=$(($a*$b))\t"
let b++
done
echo ""
let a++
done

浙公网安备 33010602011771号