linux中的shell脚本(3)

目录

1.循环语句

1.1for

1.1.1列表循环

1.1.2不带循环列表

1.1.3类似于C语言风格的for循环

例子:

面试题:

2.while


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次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值