shell脚本学习笔记—循环语句

八、shell流程控制-for循环语句

脚本在执行任务的时候,总会遇到需要循环执行的时候,比如说我们需要脚本每个五分钟执行一次ping的操作,除了计划任务,我们还可以使用脚本来完成,那么我们就用到了循环语句。

1、for循环介绍

很多人把for循环叫做推荐循环,或者for i in 。其实前者说的就是for的特性,for循环的次数和给予的条件是成正比的,你给5个条件,他就循环5次,后者说的是for的语法。
循环优点,节省内存;结构更清晰;节省时间成本

2、for语法

2.1.for语法_one

for var in value1 value2 value2 …
do
commands
done
接下来,实例输出1-9

[root@localhost ssh]# cat shell_for.sh
#!/bin/bash
#seq可以输出指定规律的数字,默认递增加1;如需要输出1——9,每次加2的话,则可以`1 2 9`;如需要输出9-1,则可以`9 -1 1`;
for i in `seq 1 9`
        do
                echo $i
                #每隔1秒输出一次
                sleep 1
done
[root@localhost ssh]# sh shell_for.sh
1
2
3
4
5
6
7
8
9
[root@localhost ssh]# cat shell_for_test.sh
#!/bin/bash
for var in jjl\'s is cool, jjl\'s is nice
 do
   echo "word: $var"
done
[root@localhost ssh]# sh shell_for_test.sh
word: jjl's
word: is
word: cool,
word: jjl's
word: is
word: nice

2.2.for语法_two

c式的for命令

for ((变量;条件;自增减运算))
do
代码块
done

代码演示

[root@localhost ssh]# cat shell_for_two.sh
#!/bin/bash
# i++ 表示i=i+1
for ((i=1;i<10;i++))
        do
                echo $i
done
[root@localhost ssh]# sh shell_for_two.sh
1
2
3
4
5
6
7
8
9

多条件for循环

[root@localhost ssh]# cat shell_for_more.sh
#!/bin/bash
for ((a=0,b=9;a<10;a++,b--))
        do
                echo $a $b
done
[root@localhost ssh]# sh shell_for_more.sh
0 9
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
9 0

for无限循环 使用((;;))条件可以实现无限循环

[root@localhost ssh]# cat shell_for_del.sh
#!/bin/bash
for ((;;))
        do
                echo 'hahah'
done

3、循环控制语句

3.1 sleep N 脚本执行到该步休眠N秒

代码演示:

#!/bin/bash

for i in `seq 9 -1 1`
        do
                echo -n -e "\b$i"
                #每隔1秒输出一次
                sleep 1
done
echo
[root@localhost ssh]# sh sleep.sh
倒计时:1

监控主机是否存活

[root@localhost useful]# cat control_active.sh
#!/bin/bash
#监控主机存活的脚本
for ((;;))
        do
                ping -c1 $1 &>/dev/null
                if [ $? -eq 0 ]
                        then
                                echo -e "`date +"%F %H:%M:%S"`: $1 is \033[32m UP \033[0m"
                else
                                echo -e "`date +"%F %H:%M:%S"`: $1 is \033[31m Down \033[0m"
                fi
                #脚本节奏控制 生产上建议一分钟以上
                sleep 5
done
[root@localhost useful]# sh control_active.sh 192.168.104.44
2021-12-24 16:28:17: 192.168.104.44 is  UP
2021-12-24 16:28:22: 192.168.104.44 is  UP

3.2 continue 跳过循环中的某次循环,继续执行下次循环

默认循环输出1-9,但是使用continue跳过输出5

[root@localhost ssh]# cat continue.sh
#!/bin/bash
# 默认循环输出1-9,但是使用continue跳过输出5
for ((i=1;i<10;i++))
 do
  if [ $i -eq 5 ]
   then
    continue
  else
   echo $i
  fi
done
[root@localhost ssh]# sh continue.sh
1
2
3
4
6
7
8
9

3.3 break 跳出循环继续执行后续代码

[root@localhost ssh]# cat for_break.sh
#!/bin/bash
#要求用户输入一个字母Q,当输入Q时退出循环
for ((;;))
  do
    read -p "char:" ch
    if [ $ch == "Q" ]
     then
      echo "输入正确"
      break
    else
      echo "你输入的字母有误,你输入的字母是:$ch"
    fi
done
[root@localhost ssh]# sh for_break.sh
char:S
你输入的字母有误,你输入的字母是:S
char:E
你输入的字母有误,你输入的字母是:E
char:R
你输入的字母有误,你输入的字母是:R
char:W
你输入的字母有误,你输入的字母是:W
char:Q
输入正确

九、shell流程控制-while循环语句

一、使用场景

明确知道循环的次数用for,不清楚循环次数时用while

二、while循环语法

while [ condition ]  #注意:条件为真while才会循环,条件为假,while停止循环,**如果条件中有变量则用引号将变量名引起来**。
 do
  commands
done

三、实例

#!/bin/bash
#while基础语法学习
#条件可以是我们学习的五种运输中任何一种
#数学比较运输  字符串比较  文件类型  逻辑运输  赋值运算

#输入一个数,如果这个数大于0,则就输出“大于”
read -p "NUM:" num1
while [ $num1 -gt 0 ]
 do
  echo "大于"
  sleep 3
done



#输入一个字符串,如果输入的字符串为“root“,则就跳出循环
read -p "login:" account
while [ $account != 'root' ]
 do
  read -p "login:" account
done


#假如home目录下没有jjl文件夹,则就一直输出“not found /home/jjl”
while [ ! -d /home/jjl ]
 do
  echo "not found /home/jjl"
  sleep 3
done


#如果money小于100000,car_num小于1,house小于1,则就继续循环
read -p "money:" money
read -p "car:" car_num
read -p "house:" house
while [  $money -lt 100000 ] || [  $car_num -lt 1 ] || [  $house -lt 1 ]
  do
    echo "not"
    read -p "money:" money
    read -p "car:" car_num
    read -p "house:" house
done
echo "ok"

十、shell流程控制-until循环语句

一、until介绍

和while正好相反,until是条件为假开始执行,条件为真停止执行

二、until语法

until [ condition ] #注意:条件为假until才开始循环,条件为真停止循环
do
commands 代码块
done

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XL's妃妃

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

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

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

打赏作者

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

抵扣说明:

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

余额充值