【shell】shell脚本循环语句(for、while、until)

目录

一、循环语句的特点

二、三种常用的循环

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

for((表达式①;表达式②;表达式③))
表达式①:定义变量并赋值
表达式②:决定是否循环
表达式③:决定循环变量如何改变,决定循环什么时候结束

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

3.7 判断用户是否在线,在线发送hello,不在线显示用户不在线

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维菜鸟XY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值