当前位置: 首页 > article >正文

shell脚本之while循环和until循环

1、while循环

循环执行是以满足条件为前提,条件不满足,循环终止。

用于不知道循环次数,直到条件不满足为止。

while  [判断条件]

do

        代码

done

例1:打印1-5的数字 

i=1 #在循环体外定义一个初始值

while [ i -le 5 ]

do

echo $i

let i++ #让变量发生变化,以达到条件不满足的情况,终止循环

done

 例2:用while的方式实现1-100的奇数和以及偶数和

#!/bin/bash

i=0

sum1=0

sum2=0

while [ $i -le 100 ]

do

if [ $(($i%2)) -eq 0 ]

then

sum1=$(($sum1+$i))  #偶数累加

else

sum2=$(($sum2+$i))  #奇数累加

fi

let i++ #这个一般都放在done上面,以免出现bug

done

echo "偶数和$sum1"

echo "奇数和$sum2"

死循环

三种写法如下: 

while   true

do

        代码

done
----------------------------------
while :

do

    代码
done
----------------------------------
while [1 -eq 1]

do

    代码    
done

2、until循环 

不满足条件才进行循环,一旦条件成立,循环立即终止。

until  [判断条件]

do

    代码

done

练习

练1:打印出/opt目录下,所有的以.txt为结尾的文件的内容合并到一个文件

#!/bin/bash

for file in /opt/*.txt

do

paste "$file" >> /opt/1.txt

done

练2:用户输入密码,脚本来判断密码是否正确,正确的是123456,输入正确提示用户,连续输错三次以上提示 。

#!/bin/bash

i=1

psd="123456“

while [ $i -le 3 ] do

read -s -p "请输入密码:" key #-s输入不可见

if [ "$key" == ""$psd" ]

then echo "密码输入正确"

exit

else echo "输入错误"

let i++ fi done

echo"输入三次错误密码,锁定!"

练3:自定义输入一个网段 192.168.206.{1-254} 然后ping整个网段,保留可用的地址到/opt/hosts,#ping不通提示不通即可,同时不显示ping的过程

#!/bin/bash
read -p "请输入192.168.206.网段:" ip
for i in {1..254}
do
{
ping -c 3 ${ip}${i} &> /dev/null
if [ $? -eq 0 ]
then
    echo "${ip}${i}" >> /opt/host_ip
    echo "${ip}${i}可用"
else
    echo "${ip}${i}不可用"
fi
}&   #用花括号把整个执行语句作为一个整体,然后&表示并行处理
done
wait  #执行结束之后不等待,直接退出

练4:猜数字,用for 或者 while 写一个死循环,随机生成一个数1-100,用户要一直猜数字,直到猜对了才可以退出。

#!/bin/bash

echo "猜数字游戏开始了"

count=0

a=$((RANDOM%100+1))

echo $a > 123.txt

for((;;))

do

read -p "请输入一个数字(1-100):" num

let count++

if [ "$num" -lt "$a" ]

then

echo "数字比你输入的数大,请继续猜"

elif [ "$num" -gt "$a" ]

then

echo "数字比你输入的数小,请继续猜"

else

echo "总共猜了$count次"

echo "恭喜你猜对了,结束游戏"

exit

fi

done

练5:死循环实现整数运算即可:+ - * / %

#! /bin/bash

for((;;))

do

read -p "请输入第一个数字:" num1

read -p "请输入运算符(+ - * / %):"  fh

read -p "请输入第二个数字:" num2

if [[ "$fh" == "/" || "$fh" == % ]]

then

if [ $num2 -eq 0 ]

then

echo "输入错误,除数不能为0"

continue

fi

fi

result=`echo $((${num1} ${fh} ${num2}))`
echo "计算的结果是$result"
done


http://www.kler.cn/a/404279.html

相关文章:

  • 【腾讯云产品最佳实践】腾讯云CVM入门技术与实践:通过腾讯云快速构建云上应用
  • HarmonyOS鸿蒙系统上File文件常用操作
  • 键盘上打出反引号符号(´),即单个上标的撇号(这个符号与反引号 ` 不同,反引号通常位于键盘的左上角)
  • HarmonyOS4+NEXT星河版入门与项目实战------Button组件
  • 极客时间《Redis核心技术与实战》开篇词 知识点总结
  • 【Python基础】第04节课:数字与盒子的奇妙冒险
  • 【ChatGPT】ChatGPT在多领域知识整合中的应用
  • OSG开发笔记(三十三):同时观察物体不同角度的多视图从相机技术
  • 线性回归 - 最小二乘法
  • 适用于资源受限IoT系统的非对称语义图像压缩技术
  • 【正则表达式 PYTHON】
  • 视觉顶会论文 | 基于Swin Transformer的轴承故障诊断
  • 每日一题 LCR 079. 子集
  • 【Linux】<共享内存应用>——模拟实现不同进程把hello字符对<共享内存文件对象>的放入和取出操作
  • Seatunnel运行时报错Caused by: java.lang.NoClassDefFoundError: com/mysql/cj/MysqlType
  • 2024年亚太地区数学建模大赛C题-宠物行业及相关行业的发展分析与策略
  • 如何查看 Android 项目的依赖结构树
  • 集成学习的起源与哲学
  • Qt添加外部库:静态库和动态库,批量添加头文件
  • 【XSS】payload#1
  • 利用oss进行数据库和网站图片备份
  • Flowable第三篇、Flowable之任务分配(任务分配、流程变量、候选人和候选人组)
  • 【Lucene】搜索引擎和文档相关性评分 BM25 算法的工作原理
  • 大数据新视界 -- 大数据大厂之 Impala 性能优化:资源分配与负载均衡的协同(下)(24 / 30)
  • 如何使用GPT API 自定义 自己的 RAG
  • [羊城杯 2020]easyre