shell脚本——第三集

循环

循环是指依赖某一个条件的限制,对一串逻辑性代码,进行反复性的操作,直到能够满足预期结果进行结束循环。如果没有预期结果,不间断执行,我们称之为“死循环” 。与循环有关的三个专业性名词:遍历,迭代,递归

  • 遍历(traversal) - 按规则访问非线性结构中的每一项。
  • 迭代(iterate) - 按顺序访问线性结构中的每一项。
  • 递归(recursion) - 在函数内调用自身, 将复杂情况逐步转化成基本情况。

循环——for

语法:

for <变量> in <取值列表>
  do
    命令集
    ......
  done

在这里插入图片描述

基本循环

列表打印–打印一份一到十的数字列表
vim for1.sh
    #!/bin/bash

    for i in {1..10}
      do
        echo $i
      done

chmod +x for1.sh

./for1.sh

在这里插入图片描述
在这里插入图片描述

累加求和–求从1加到10的和
vim for3.sh
    #!/bin/bash
    sum=0
    for i in {1..10}
      do
        sum=$[sum+i]
      done
    echo $sum

chmod +x for3.sh

./for3.sh

在这里插入图片描述

在这里插入图片描述

文件内容循环

批量添加用户
  • 用户名存放在users.txt文件中,每行一个

  • 初始密码均设为123456

#编辑users.txt文件
vim users.txt
  tangtang
  wl
  cy
  sanshi
  tj
  yzl

#编辑创建用户的脚本
vim for4.sh 
  #!/bin/bash
  namefile=/root/users.txt
  for name in $( cat $namefile )
  do
      useradd $name
    echo 123456 | passwd --stdin $name
  done
  echo "用户创建完成"

#执行

chmod +x for4.sh

./for4.sh

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

根据IP地址检查主机状态
  • IP地址存放在ipadds.txt文件中,每行一个

  • 使用ping命令检测各主机的连通性

#编辑ipadds.txt文件
vim ipadds.txt
  10.190.33.10
  10.190.33.20
  10.190.33.30
  10.190.33.91
  10.190.33.92
  10.190.33.93




#编辑ping命令的脚本
vim for5.sh 
  #!/bin/bash
  ipfile=/root/ipadds.txt
  for ip in $( cat $ipfile )
  do
    ping -c 4 -i 0.5 -w 2 $ip
    if [ $? -eq 0 ]
        then 
               echo "$ip is online"
        else
            echo "$ip is offline"
    fi
  done


#执行

chmod +x for5.sh

./for5.sh

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

运行结果过于冗杂,可以使用“&>”输出到/dev/null文件中

vim for5.sh 
  #!/bin/bash
  ipfile=/root/ipadds.txt
  for ip in $( cat $ipfile )
  do
    ping -c 4 -i 0.5 -w 2 $ip &> /dev/null
    if [ $? -eq 0 ]
        then 
               echo "$ip is online"
        else
            echo "$ip is offline"
    fi
  done

在这里插入图片描述

在这里插入图片描述

循环——while

语法:

while <条件测试表达式>
  do
    命令集
    ......
  done

在这里插入图片描述

写个脚本实现 猜测0-999的随机价格,猜不中则一直猜

vim whlie1.sh
    #!/bin/bash
    PRICE=$[RANDOM % 1000]
    a=1
    b=0
    while [ $a -eq 1 ];
    do
      read -p "请输入你猜测的价格(0-999):" NUM  
      let b++
      if [ $NUM -eq $PRICE ] && [ $b -le 5 ];then
        echo "恭喜!你猜中了!!"
        exit 0
      elif [ $NUM -gt $PRICE ] && [ $NUM -le 999 ];then
        if [ $b -lt 5 ];then
          echo "猜大了!!请重猜"
        else
          echo "真遗憾,猜测次数用完!"
          exit 1
        fi
      elif [ $NUM -le $PRICE ] && [ $NUM -ge 0 ];then
        if [ $b -lt 5 ];then
          echo "猜小了!!请重猜"
        else
          echo "真遗憾,猜测次数用完!"
          exit 2
        fi
      else
        echo "输入有误!请重新输入!!"
      fi
    done


chmod +x whlie1.sh


./whlie1.sh    

在这里插入图片描述

在这里插入图片描述

计算从1到任意数(小于100)所有整数的和

vim while2.sh
      #!/bin/bash
      a=1
      sum=0
      read -p "请输入一个1到100的整数:" num
      if [ $num -ge 1 ] && [ $num -le 100 ];then

        while [ $a -le $num ]
        do
          let sum+=a
          let a++

        done

        echo "1到 $num 总和为$sum"

      else
        echo "输入有误!"
      fi


chmod +x while2.sh

./while2.sh

在这里插入图片描述

在这里插入图片描述

循环——until

语法:

until <条件测试表达式>
  do
    命令集
    ......
  done

在这里插入图片描述

求1-50的和

vim until1.sh
    #!/bin/bash
    a=1
    sum=0
    until [ $a -gt 50 ]
     do
      let sum+=$a
      let a++
     done
    echo "1-50之间的整数和为: $sum "


chmod +x until1.sh


./until1.sh

在这里插入图片描述

在这里插入图片描述

退出循环

CONTINUE

语法:

continue n
n 表示循环的层数:
  • 如果省略 n,则表示 continue 只对当前层次的循环语句有效,遇到 continue 会跳过本次循环,忽略本次循环的剩余代码,直接进入下一次循环。

  • 如果带上 n,比如 n 的值为 2,那么 continue 对内层和外层循环语句都有效,不但内层会跳过本次循环,外层也会跳过本次循环,其效果相当于内层循环和外层循环同时执行了不带 n 的 continue。

在这里插入图片描述

BREAK

语法:

break n
n 表示循环的层数:
  • n 表示跳出循环的层数,如果省略 n,则表示跳出当前的整个循环。break关键字通常和 if 语句一起使用,即满足条件时便跳出循环

在这里插入图片描述

EXIT

语法:

exit n
  • exit 命令用于退出当前程序,并返回程序执行结果。
  • exit 命令可以接受一个整数值作为参数,代表退出状态。如果不指定,退出码由shell中最后一个命令决定。一般情况下,退出状态为 0 表示成功,退出状态为非 0表示执行失败(出错)。
  • exit 退出状态只能是一个介于 0~255 之间的整数。
  • $?保存exit退出值。
  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值