当前位置:网站首页>shell脚本循环语句for、while语句
shell脚本循环语句for、while语句
2022-08-10 21:23:00 【灌南牛x人】
目录
先定义一个变量while 表达式(条件)do 循环语句命令done案例
for循环语句
读取不同的变量值,用来逐个执行同一组命令
for循环经常使用在已经知道要进行多少次循环的场景
格式
for 变量名 in 取值列表
do
命令序列
done

案列
显示打印输出1-7




案例2

案列3


小案列


小案列


这个倒叙也可以,包括大括号里面的都可以灵活调换
不带列表循环时,我们可以指定参数进行打印出来


下一个案列

如果想看到运算过程


批量创建用户,并设置密码



案例




根据ip地址列表检查主机状态



判断密码输入是否正确


幸运会员抽奖



let :相当于 简单的计算器
**语 法**
let[计算表达式]
**功 能**
let 命令:是 BASH中用于计算的工具,提供常用运算符还提供了方幂“**”运算符。在变量的房屋计算中不需要加上$来表示变量,如果表达式的值是非0,那么返回的状态值是0;否则,返回的状态值是1
类C风格的for循环
for ((expr1;expr2;expr3))
do
command
doneexpr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出
显示输出1-5
#!/bin/bash
for((i=1;i<=5;i++)) #此时你要注意只要有i++ 就要有两个括号
do
echo $i
done


嵌套 循环 星星

:
如何把星星变成三角形


9 9乘法表
#!/usr/bin/env bash
for ((a=1;a<=9;a++))
do
for ((b=1;b<=9;b++))
do
if [[ a -ge b ]];then
echo -n "$b*$a=$[a*b] "
fi
done
echo " "
done



随机生成密码(达到一定复杂度)
#!/bin/bash
key="[email protected]#¥%%…………&&**(())————+"
num=${#key}
pass=''
for i in {1..6}
do
index=$[RANDOM%num]
pass=$pass${key:$index:1}
done
echo "随机生成的密码时:$pass"

法二:随机生成密码


while循环语句


while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环
先定义一个变量
while 表达式(条件)
do
循环语句命令
done
案例
打印1-5



1到100能被3整除的数字
#!/bin/bash
i=1
while [ $i -le 100 ]
do
if [[ $i%3 -ne 0 ]]
then
echo "$i"
fi
let i++
done
开启apache服务
#!/bin/bash
while ps aux |grep httpd |grep -v grep &>/dev/null
#ps aux 动态查找所有进程 grep httpd :过滤显示出带有httpd字段的 最>后 -v:取反 反向查找,过滤掉带有grep字段的
do
echo "Apache 服务正在运行中"
sleep 2 #睡眠两秒
done
echo "Apache 服务不在运行,请查看服务是否出现故障"
猜数字
while里面解决死循环的方法,用break退出循环
#!/bin/bash
cnum=520
while true
do
read -p "请输入数字:" num
if [ $num -eq $cnum ];then
echo "你猜对了!"
break
elif [ $num -gt $cnum ];then
echo "你猜的数字过大啦!"
elif [ $num -lt $cnum ];then
echo "你猜的数字过小啦!"
fi
done

猜商品价格
#!/bin/bash
PC=`expr $RANDOM % 1000`
a=0
echo "商品实际价格范围0-999,请猜猜看是多少?"
while true
do
read -p "请输入你猜的价格数目:" num
let a++
if [ $num -eq $PC ];then
echo "恭喜你答对了,实际价格是 $PC "
echo "你总共猜了$a次"
exit 0 #退出
elif [ $num -gt $PC ];then
echo "你猜高了!"
else
echo "你猜低了!"
fi
done

: 
监控系统资源中的内存和硬盘空间
#!/bin/bash
disk_size=$( df / |awk '/\//{print $4 }') #硬盘的可用空间
Mem_size=$(free | awk '/Mem/{print $4}') #分区的可用空间
while
do
if [ $disk_size -le 2560000 -a $Mem_size -le 102400 ];then
mail -s Warning root <<EOF
内存和硬盘空间不足请尽快处理!
EOF
#EOF是免交互模式,直接把东西传给邮箱进行警告#注意EOF必须要顶格写才能成功
fi
Done商店购物
#!/bin/bash
i=1
sum=0
while [ $i -le 5 ]
do
echo "本公主今天宠爱第$i家商店呢"
read -p "是否进入看看(yes/no)" doing
while [ $doing = "yes" ]
do
echo "1:衣服 ¥200"
echo "2:鞋子 ¥150"
echo "3:帽子 ¥50"
echo "4:裤子 ¥165"
read -p "请选择需要购买的商品序列号:" num
case $num in
1)
echo "衣服购买成功!"
expr $[ sum+=200 ] &> /dev/null
;;
2)
echo "鞋子购买成功!"
expr $[ sum+=150 ] &> /dev/null
;;
3)
echo "帽子购买成功!"
expr $[ sum+=50 ] &> /dev/null
;;
*)
echo "裤子购买成功!"
expr $[ sum+=165 ] &> /dev/null
;;
esac
read -p "是否继续进行购买(yes/no)" doing
done
let i++
if [ $doing = "no" ]
then continue
fi
done
echo "今天您的购物总价为:$sum"
if [ $sum -ge 150 ] && [ $sum -lt 200 ];then
let sum=sum-50
elif [ $sum -ge 200 ] && [ $sum -le 400 ];then
let sum=$sum-100
fi
echo "打折之后的价格为:$sum"

until 循环语句结构
重复测试某个条件,只要条件不成立则反复执行
until 条件测试操作
do
命令序列
done
用法: 重复测试某个条件,只要条件不成立则反复执行
只要while后面的命令退出状态为0,while循环就一直执行下去,until命令与while命令相似,唯一的区别在于,只要until后面的命令退出不为0,until循环就一直执行下去,也就是说,使用until语句重复执行一段代码直到条件为真为止,与while类似
计算1-50的和
#!/bin/bash
#功能1:0-50的和是多少?
i=0;s=0
until [ $i -eq 51 ]
do
let s+=i
let i++
done
echo $s


编写脚本的思路
1.首先明确脚本的功能
案例:需求是创建用户并测试用户20个
->那肯定要用循环for、 while
->知道需求含义来定义脚本的功能
2.编写脚本时会使用到哪些命令?
如上面的需求:就要使用useradd passwd let echo for while 等命令3.把变化的数据使用变量表示【记得要先定义哦】
固定长的定义变量、经常调用的参数可设变量
变化的定义变量4.选择适合的流程控制
【循环语句、双分支、多分支、case等一些控制语句 】
continue和break
break和continue都是用来控制循环结构的,主要是停止循环。
break 有时候我们想在某种条件出现的时候终止循环而不是等到循环条件为false才终止。 这时我们可以使用break来完成。break用于完全结束一个循环,跳出循环体执行循环后面的语句。
continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环。 可以理解为continue是跳过当次循环中剩下的语句,执行下一次循环。
使用方法
break:语法 break 将用于以下break语句退出循环
break n 这里n指定的第n个封闭的循环退出
continue:
语法 continue 和break语句一样,一个整数参数可以给continue命令跳过嵌套循环的命令
continue n 这里n指定第n个封闭循环 continue
边栏推荐
猜你喜欢

异常的了解

RADIUS Authentication Server Deployment Costs That Administrators Must Know

ACM模板笔记:最长不下降/上升子序列

C#【必备技能篇】Hex文件转bin文件的代码实现

Likou 221 questions, the largest square

PROCEDURE :存储过程结构——《mysql 从入门到内卷再到入土》

快消品行业经销商协同系统:实现经销商可视化管理,提高沟通执行效率

LeetCode-36-二叉搜索树与双向链表

一篇文章教你Pytest快速入门和基础讲解,一定要看

我的世界整合包 云服务器搭建方法(ECS)
随机推荐
APP UI自动化测试常见面试题,或许有用呢~
基于Pix4Dmapper的运动结构恢复法无人机影像三维模型重建
【SQL刷题】Day3----SQL必会的常用函数专项练习
自建函数 测试例和语法——《mysql 从入门到内卷再到入土》
B. Trouble Sort
shell小技巧(一百三十五)打包指定目录下所用文件,每个文件单独打包
【网络通信四】ping工具源码cmake工程编译以及运行说明
RADIUS Authentication Server Deployment Costs That Administrators Must Know
数字化转型:如何引导创新领导者
Bedtime story | made a Bitmap and AST length system configuration
优化是一种习惯●出发点是'站在靠近临界'的地方
INSERT:插入操作语法&使用例——《mysql 从入门到内卷再到入土》
Likou 215 questions, the Kth largest element in an array
JVM classic fifty questions, now the interview is stable
About DataFrame: Processing Time
【nvm】【node多版本管理工具】使用说明和踩坑(exit status 1)
Getting started with kuberentes Auditing
2021 GKCTF X DASCTF应急挑战杯
第四届红帽杯网络安全大赛
DDL:CREATE 创建数据库——《mysql 从入门到内卷再到入土》