当前位置:网站首页>shell脚本循环语句for、while语句

shell脚本循环语句for、while语句

2022-08-10 21:23:00 灌南牛x人

目录

for循环语句

案列

显示打印输出1-7

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

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

  判断密码输入是否正确

幸运会员抽奖 

类C风格的for循环 

显示输出1-5 

嵌套 循环 星星 

如何把星星变成三角形

 9 9乘法表

  随机生成密码(达到一定复杂度)

 while循环语句

先定义一个变量while 表达式(条件)do    循环语句命令done案例

打印1-5

 1到100能被3整除的数字

开启apache服务

 猜数字

  猜商品价格

监控系统资源中的内存和硬盘空间 

until 循环语句结构 

计算1-50的和

编写脚本的思路 

continue和break

使用方法


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
done

expr1:定义变量并赋初值
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 
 

原网站

版权声明
本文为[灌南牛x人]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_67565536/article/details/124546418