目录
一、循环语句的特点
二、三种常用的循环
2.1 for循环
2.2 while循环
2.3 until循环
2.4 死循环
2.5 关于continue和break以及exit
三、实操案例
3.1 累加1到100(5种办法,穿插多种运算习惯)
3.2 批量修改文件名称
3.3 ping来获取内网所有存活的主机
3.4 直角三角形
3.5 九九乘法表
3.6 猜价格
一、循环语句的特点
特点:一定要有可以跳出循环的条件,否则就是死循环
那么跳出循环的条件有两种:
①已知循环的次数;
②未知次数,但是有跳出循环的限定条件;
二、三种常用的循环
2.1 for循环
##第一种语法
for i in {词语列表}
do
命令序列
done
##第二种语法
for((i=1;i<=100;i++))
do
命令序列
done
2.2 while循环
while [ 判断 ] ##条件成立继续循环,条件不成立,不再循环
do
命令序列
let i++ ##类似的语句
done
2.3 until循环
until [ 判断 ] ##条件不成立执行循环,条件成立则不再继续执行
do
命令序列
let i++ ##也可不是这种,就是会让时间循环起来的条件
done
2.4 死循环
while的死循环
while true ##永远是真,那么已知执行循环
while : ##永远是真,那么已知执行循环
while [ 1 -eq 1 ] ##永远是真,那么已知执行循环
until的死循环
until false ##永远是假的,那么已知执行
until [ 1 -eq 0 ] ##永远是假的,那么已知执行循环
2.5 双重循环之关于continue和break以及exit
#!/bin/bash
for((i=1;i<=3;i++))
do
for((j=1;j<=3;j++))
do
if [ $j -eq 2 ]
then
# continue
# break
exit
else
echo j=$j
fi
done
echo ------------------
done
三、实操案例
3.1 累加1到100(5种办法,穿插多种运算习惯)
##第一种办法,使用for循环
suma=0
for i in {1..100}
do
suma=$[suma+i]
done
echo sum1=${suma}
##第二种办法,还是使用for循环
sumb=0
for((j=0;j<=100;j++))
do
let sumb+=$j
done
echo sum2=${sumb}
##第三种办法,使用while循环
sumc=0
n=0
while [ $n -le 100 ]
do
sumc=`expr ${sumc} + $n`
let n++
done
echo sum3=${sumc}
##第四种方法,使用until语句
sumd=0
x=0
until [ $x -gt 100 ]
do
sumd=$((${sumd}+${x}))
let x+=1
done
echo sum4=${sumd}
##第五种办法,使用seq和bc计算
sume=$(seq -s+ 100|bc)
echo sum5=${sume}
表示0-100的奇数和偶数的方式
使用花括号:奇数{1..100..2} 偶数{0..100..2}
使用seq:奇数 seq 1 2 100 偶数 seq 0 2 100
使用for循环:奇数((i=1;i<=100,i+=2));偶数((i=0;i<=100,i+=2))
3.2 批量修改文件名称
#!/bin/bash
for i in /xh/*.bak ##表示变量i的取值来源于文件夹xh下面的以bak结尾的文件
do
name=$(echo $i|cut -d"." -f1) ##表示每次循环的动作是,先将bak前面的名称提取出来给name变量赋值
mv $i ${name}.txt ##变量i就是文件名,然后把原来的文件名改为新的文件名,以txt结尾
done
3.3 ping来获取内网所有存活的主机
#!/bin/bash
ip=$(ifconfig ens33|grep netmask|awk '{print $2}') ##提取本机的ip地址
net=${ip%.*}. ##提取本机的网段
end=254
for((i=3;i<="${end}";i++)) ##设置循环条件从3到254循环
do
{
ping -c2 -W1 ${net}${i} &>/dev/null ##使用ping检测主机是否存活
if [ $? -eq 0 ] ##能ping通则是0,ping不通是非0
then
echo ${net}${i} >>/xh/alive ##将存活的主机记录在文件中
fi
}& ##并行运行,可以大大提高脚本的执行速度
done
wait ##这个很重要,让主机能够把新文件/xh/alive文件存留下来
n=`cat /xh/alive|wc -l` ##统计文本的行数即为主机的数量
echo "你一共有${n}台主机存活"
3.4 直角三角形
#!/bin/bash
for((i=10;i>=0;i--))
do
for((j=1;j<=i;j++))
do
echo -e "*\c"
done
echo
done
3.5 九九乘法表
#!/bin/bash
for i in {1..9} ##从1-9中取值
do
for((j=1;j<=i;j++)) ##这个也可以写成 for j in `seq $i`
do
echo -e "$j*$i=$[i*j]\t\c" ##这是乘法表的格式几乘几得出结果,-e可以使用\t制表符对齐,\c不换行
done
echo ##这个echo是用来换行的
done
3.6 猜价格
#!/bin/bash
com=`echo $[RANDOM%1000+1]` ##机器产生的随机数
t=0
while true
do
read -p "请输入你猜的价格(1-1000):" price ##人类输入的价格数字
let t++ ##统计猜的次数
if [ ${com} -eq ${price} ]
then
echo "恭喜你猜对了,实际价格为${price},你一共猜了${t}次"
exit
elif [ ${com} -gt ${price} ]
then
echo "不好意思,你猜低了"
else
echo "猜高了,便宜点"
fi
done