For、while循环及脚本实操

一、for循环

用于已知循环次数的场景

1、基本格式

for 变量名称(注意是名称不是变量$等) [ in 名称范围 ] (可以不写)

do

执行内容 若满足循环则做什么动作

done for循环结束标志

举例:

vim a.sh #创建脚本a.sh

脚本内容:

#!/bin/bash

for i in {1..5} #for循环10次,第一次i=1,第二次i=2以此类推直到i=5

do

echo "$i" #循环动作,每次输出$i

done #for语句结束标志

bash a.sh #调用shell执行脚本a.sh

执行结果:

2、类C语言格式

for (( 表达式1 ;表达式2;表达式3 ))

do

执行内容 若满足循环则做什么动作

done for循环结束标志

表达式1:定义变量并赋值

表达式2:决定是否循环

表达式3:决定循环变量如何改变,决定循环什么时候结束

举例:

vim a.sh

脚本内容:

#!/bin/bash

for(( i=0;i<=5;i++ )) #定义for循环i变量初始值为0,循环条件i小于等于5,每循环一次i自加1

do

echo "$i" #for循环每循环一次执行一次输出$i

done #for语句结束标志

bash a.sh #调用shell执行脚本

输出结果:

二、while循环

用于不知道循环次数,需要主动结束循环或达到条件结束循环。

1、基本格式

while [ 判断条件] 使用while循环满足条件执行do,不满足不执行

do

执行动作 while循环执行动作

done while循环结束标志

举例:

vim b.sh #创建脚本b.sh

脚本内容:

#!/bin/bash

i=0

while [ $i -le 5 ] #变量i小于等于5时执行while循环

do

echo "$i" #循环执行内容,每循环一次打印$i

let i++ #每循环一次计算一次i++即i自己+1

done #while语句结束标志

bash b.sh #调用bash执行b.sh脚本

执行结果:

2、死循环语句

①while [1 -eq 1] 判断条件写一个永久为真的条件

do 一直执行do内的命令

done

②while true 直接写判断条件为真

do 一直执行do内的命令

done

③while : 判断条件为冒号也表示死循环

do 一直执行do内的命令

done

三、跳出循环

1、continue跳出循环

①表示满足continue条件时跳出循环,但是不影响后续循环执行

举例:

vim a.sh #创建脚本a.sh

脚本内容:

#!/bin/bash

for i in {1..5} #for循环5次从i=1开始到i=5

do

if [ $i -eq 3 ] #if判断语句,若$1等于3则执行then的内容

then

continue #当$i=3时跳出循环但不影响后面循环

fi #结束if语句

echo "$i" #没执行一次for循环输出一次$i

done #for循环结束语句

bash a.sh #调用shell执行脚本

输出结果

四、常用循环脚本实例

1、循环打印9*9乘法表

思路:

①第一步for循环打印一行9个*号

②第二步再添加一个for循环打印一个9行9列的*号正方形

②第三步将*号正方形斜砍一般形成9*9乘法表的基本格式

③第四步将*号9*9乘法表格式用乘法算式替换

9*9乘法表

第一步:

vim 99.sh #创建99.sh脚本

脚本内容:

#!/bin/bash

for i in {1..9} #for循环9次从i=1开始

do

echo -n "*" #每循环一次打印一个*,echo -n参数表示不换行

done #此for循环语句结束

bash 99.sh #调用shell执行脚本

执行结果:

*********

第二步:

vim 99.sh #编辑99.sh脚本

脚本内容:

#!/bin/bash

for j in {1..9} #添加打印列循环,循环9次从j=1开始

do #j循环时做do中的内容

for i in {1..9} #第一步for循环内容不变

do

echo -n "*"

done

echo #列循环每循环一次打印一行空格进行换行

done #列循环for语句结束标志

bash 99.sh #调用shell执行脚本

执行结果:

*********

*********

*********

*********

*********

*********

*********

*********

*********

第三步:

vim 99.sh #编辑99.sh脚本

脚本内容:

#!/bin/bash

for j in {1..9} #列循环内容不变

do

for i in `seq $j` #修改行循环i的取值范围为展开变量j,即当j=1时i取值只有1,所以循环一次。当

j=2时,i取值为1和2,所以i=1和i=2各循环一次,循环2次。以此类推到j=9

do

echo -n "*"

done

echo

done

bash 99.sh #调用shell执行脚本

执行结果:

*

**

***

****

*****

******

*******

********

*********

第四步:

vim 99.sh #编辑99.sh脚本

脚本内容:

#!/bin/bash

for j in {1..9} #列循环内容不变

do

for i in `seq $j`

do

echo -ne "$j*$i=$[ $j*$i ]\t" #行输出内容修改为9*9算式和结果。$[ ]表示计算里面的正整数结

果,echo -e参数表示调用转义符,\t表示制表符即循环时输出一个tab键

done

echo

done

bash 99.sh #调用shell执行脚本

输出结果:

1*1=1

2*1=22*2=4

3*1=33*2=63*3=9

4*1=44*2=84*3=124*4=16

5*1=55*2=105*3=155*4=205*5=25

6*1=66*2=126*3=186*4=246*5=306*6=36

7*1=77*2=147*3=217*4=287*5=357*6=427*7=49

8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64

9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81

2、循环ping测试某个网段网络连通性

需求:测试用户输入的某个32位网段是否可以ping通,且若可以ping通将此ip输出到文件host.txt中。

思路:

①第一步读取用户输入的32位网段。

②使用for循环生成用户输入网段的所有ip。

③使用ping命令在循环中测试用户输入网段内所有ip,注意指定ping包个数和超时结束时间,否则一直ping。

④将循环检查网络连通性放入后台执行。

vim ping.sh #创建ping.sh脚本

脚本内容:

#!/bin/bash

read -p "请输入需要测试的网段,格式为(192.168.30.):" ip #读取用户输入内容为变量ip

for i in {1..254} #for循环254次,从i=1开始

do

{ #将{}内容当成一个整体

ping -c2 -w2 $ip$i &>/dev/null #指定ping包为2个超时结束时间为2秒且将产生的内容全部放入null垃圾桶中,&符号表示错误输出也放入null垃圾桶中

if [ $? -eq 0 ] #if条件判断如果上一个循环执行的命令是正确的则$?返回0,若等于0执行then的内容

then

echo "$ip$i is online" #if条件成立执行打印

echo $ip$i >> host.txt #将if条件成立的ip追加到host.txt文件中

else

echo "$ip$i is offline" #if添加判断不成立执行打印

fi

}& #将循环成立的内容放入后台执行

done

wait #执行结束不等待直接退出

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值