目录
1.循环语句
循环含义
将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件
重复运行次数
-
循环次数事先已知
-
循环次数事先未知
常见的循环的命令:for, while
1.1for
语法结构
-
列表循环
-
不带列表循环
-
类C风格的for循环
1.1.1列表循环
语法:
for 变量名 in { ... }
do
command
done
列表循环的表现方式:
for i in {1..100..2} :从1开始到100结束,每次加2,步长为2,打印的都是奇数
for i in {0..100..2} :从0开始到100结束,每次加2,步长为2,打印的都是偶数
`seq 10` 调用seq的命令执行结果1到10
seq 0 2 10 偶数
seq 1 2 10 奇数
1.1.2不带循环列表
语法:
for 变量名
do
command
done
[root@localhost /]# vim for.sh
#!/bin/bash
for i
do
echo hello
done
[root@localhost /]# . for.sh a
#把a赋值给变量i,i有值了它就开始执行do..done了
hello
1.1.3类似于C语言风格的for循环
语法:
for ((expr1;expr2;expr3))
do
command
done
##1加到100的和##
[root@localhost /]# vim for1.sh
#!/bin/bash
sum=0
i=0
for((i=0;i<=100;i++))
do
let sum+=i
done
echo $sum
[root@localhost /]# bash for1.sh
5050
例子:
###1加到100的和:###
[root@localhost ~]# vim 100.sh
#!/bin/bash
sum=0
i=0
for i in {1..100}
do sum=$[sum+i]
done
echo $sum
[root@localhost ~]# bash 100.sh
5050
##9 9 乘法表##
[root@localhost ~]# vim cfb.sh
#!/bin/bash
for j in {1..9}
do
for i in `seq $j`
do
echo -e "${i}*${j}=$[i*j]\t\c"
done
echo
done
[root@localhost ~]# bash cfb.sh
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
面试题:
面试题:
1.将某文件夹下的所有.txt文件的后缀名改成bak
[root@localhost data]# vim t1.sh
#!/bin/bash
for i in *.txt
do
pre=`echo $i|cut -d "." -f1`
mv $i ${pre}.bak
done
~
[root@localhost data]# bash t1.sh
[root@localhost data]# ls
1.bak 3.bak 5.bak nginx-1.18.0.tar.gz t1.sh
2.bak 4.bak nginx-1.18.0 nginx-1.18.0.tar.gz.1
2.检测一整个网段的主机是否存活##
192.168.49.0
将存活的主机放在一个文件中,不存活的文件放在另一个文件中
[root@localhost /]# vim test.sh
#!/bin/bash
ip=192.168.49.
for i in {1..254}
do
{
ping -c1 -W1 ${ip}${i} &>/dev/null
if [ $? -eq 0 ]
then
echo ${ip}${i} >> /data/hoston
else
echo ${ip}${i} >> /data/hostoff
fi
} &
done
[root@localhost /]# bash test.sh
[root@localhost /]# cd /data
[root@localhost data]# ls
1.bak 3.bak 5.bak hoston nginx-1.18.0.tar.gz t1.sh
2.bak 4.bak hostoff nginx-1.18.0 nginx-1.18.0.tar.gz.1
[root@localhost data]# tail hoston
192.168.49.10
192.168.49.2
192.168.49.1
[root@localhost data]# tail hostoff
192.168.49.205
192.168.49.170
192.168.49.197
192.168.49.211
192.168.49.178
192.168.49.190
192.168.49.152
192.168.49.155
192.168.49.202
192.168.49.253
2.while
我们只知道停止条件,不知道次数,就需要使用while
直到达到条件
while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环
例子:
#######求和#######
[root@localhost /]# vim qiuhe.sh
#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
let sum+=$i
let i+=2
done
echo $sum
[root@localhost /]# bash qiuhe.sh
2550
[root@localhost /]# vim qiuhe.sh
#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
let sum+=$i
let i++
done
echo $sum
[root@localhost /]# bash qiuhe.sh
5050
##猜价格游戏##
[root@localhost ~]# vim cai.sh
#!/bin/bash
m=`echo $[RANDOM%1000+1]`
t=0
while true
do
read -p "请输入猜的价格(1-1000内的整数):" h
let t++
if [ $h -eq $m ]
then
echo "恭喜你猜对了,商品的价格是$h,你一共猜了$t次"
exit
elif [ $h -gt $m ]
then
echo "你的价格猜高了"
else
echo "你的价格猜低了"
fi
done
[root@localhost ~]# bash cai.sh
请输入猜的价格(1-1000内的整数):700
你的价格猜低了
请输入猜的价格(1-1000内的整数):800
你的价格猜低了
请输入猜的价格(1-1000内的整数):900
你的价格猜高了
请输入猜的价格(1-1000内的整数):850
你的价格猜低了
请输入猜的价格(1-1000内的整数):860
你的价格猜低了
请输入猜的价格(1-1000内的整数):880
你的价格猜高了
请输入猜的价格(1-1000内的整数):870
你的价格猜低了
请输入猜的价格(1-1000内的整数):875
你的价格猜低了
请输入猜的价格(1-1000内的整数):877
你的价格猜低了
请输入猜的价格(1-1000内的整数):890
你的价格猜高了
请输入猜的价格(1-1000内的整数):888
你的价格猜高了
请输入猜的价格(1-1000内的整数):878
你的价格猜低了
请输入猜的价格(1-1000内的整数):879
恭喜你猜对了,商品的价格是879,你一共猜了13次