首页 > 系统相关 >Shell编程 - 循环篇

Shell编程 - 循环篇

时间:2024-12-01 18:54:36浏览次数:13  
标签:bin do Shell 编程 echo while 循环 done bash

1. for循环

  • 格式:
for 变量名 in 取值列表; do
    命令
done
  • 示例:
#!/bin/bash
for i in {1..3}; do
    echo $i
done
# bash test.sh
1
2
3

for的语法也可以这么写:
#!/bin/bash
for i in "$@"; {    # $@是将位置参数作为单个来处理
    echo $i
}
# bash test.sh 1 2 3
1
2
3

2. while语句

  • 格式:
while 条件表达式; do
    命令
done
  • 示例1:
#!/bin/bash
N=0
while [ $N -lt 5 ]; do
    let N++
    echo $N
done
# bash test.sh
1
2
3
4
5

当条件表达式为false时,终止循环。

  • 示例2:条件表达式为true,将会产生死循环
1. 直接写正确的表达式
#!/bin/bash
while [ 1 -eq 1 ]; do
    echo "yes"
done

2. 也可以条件表达式直接用true:
#!/bin/bash
while true; do
  echo "yes"
done

3. 还可以条件表达式用冒号,冒号在Shell中的意思是不做任何操作。但状态是0,因此为true:
#!/bin/bash
while :; do
    echo "yes"
done
  • 示例3:逐行处理文本
    • 文本内容:
      # cat a.txt
      a b c
      1 2 3
      x y z
      
    • 要想使用while循环逐行读取a.txt文件,有三种方式:
      • 方式1:⭐
         #!/bin/bash
         cat ./a.txt | while read LINE; do
             echo $LINE
         done
        
      • 方式2:⭐⭐⭐
        #!/bin/bash
        while read LINE; do
            echo $LINE
        done < ./a.txt
        
      • 方式3: ⭐
          #!/bin/bash
          exec < ./a.txt  # 读取文件作为标准输出
          while read LINE; do
              echo $LINE
          done
        

案例2. 通过while read方式,统计ip.txt文件,次数大于5,ping下.

  • ip.txt:
 10.0.0.61 5
 10.0.0.7  6
 10.0.0.8  8
 baidu.com  10
 jd.com  5
#1.vars
 src_file=./ip.txt
#2.while读取与判断
while read ip count
 do
    #ip=`echo $line+awk取列`
    if [ $count -ge  5 ];then
       ping -c 1  $ip  &>/dev/null
       if [ $? -eq 0 ];then
          greenecho "$ip 可以访问"
       else
          redecho "$ip 不可以访问"
       fi
    fi
 done <$src_file

3. break和continue语句

break是终止循环。
continue是跳出当前循环。

  • 示例1:在死循环中,满足条件终止循环
#!/bin/bash
N=0
while true; do
    let N++
    if [ $N -eq 5 ]; then
        break
    fi
    echo $N
done
# bash test.sh
1
2
3
4

里面用了if判断,并用了break语句,它是跳出循环。与其关联的还有一个continue语句,它是跳出本次循环。

  • 示例2:举例子说明continue用法
#!/bin/bash
N=0
while [ $N -lt 5 ]; do
    let N++
    if [ $N -eq 3 ]; then
        continue
    fi
    echo $N
done
# bash test.sh
1
2
4
5

当变量N等于3时,continue跳过了当前循环,没有执行下面的echo。
注意:continue与break语句只能循环语句中使用。

标签:bin,do,Shell,编程,echo,while,循环,done,bash
From: https://www.cnblogs.com/kyle-7Qc/p/18580185

相关文章

  • 第9天:基础入门-反弹Shell&渗透命令&Reverse反向&Bind正向&利用语言&文件下载&多姿势
    #知识点:1、反弹Shell-项目&命令&语言等2、系统渗透命令-网络&文件&操作等一、反弹Shell的前提条件:已知存在漏洞利用或执行命令的地方,怎么去已知,则需用到第8天的判断方式,进行判断是否存在命令执行的地方,在这个前提下,再去执行shell反弹;二、为什么要反弹Shell?往......
  • C语言循环与详解操作符 基础知识大汇总(下)(保驾护航大家的C语言)(保姆级超详细解说)(应对各
    hello大家好啊,这里是星空没有雨,今天你的城市下雨了吗,今天星宇给大家带来c语言环以及操作符详解,程让我们更多的新手伙伴们更好的入门   OK,now,let'sgo1.详解操作符/与%(1)/运算符/⽤来完成除法。除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。......
  • C 语言学习心得:编程世界的初体验与成长
    学习C语言的过程就像是一场充满挑战与惊喜的冒险。从最初接触到它神秘而严谨的语法结构,到逐渐能够运用它构建出具有各种功能的程序,这期间我经历了困惑、沮丧,更收获了满满的成就感,深刻体会到了编程的魅力与艰辛。 C语言简洁而高效的特性犹如一把双刃剑。一方面,它给予了程......
  • Python中的GIL(全局解释器锁)是什么?它如何影响多线程编程?
    Python中的GIL(全局解释器锁)是什么?它如何影响多线程编程?Python中的GIL(全局解释器锁)是什么?它如何影响多线程编程?摘要引言什么是GIL?为什么它会影响多线程?1.**什么是GIL(全局解释器锁)?**1.1**GIL的目的**1.2**GIL的工作机制**2.**GIL对多线程编程的影响**2.1**多线程不......
  • 泷羽sec-shell(7)for循环与while循环 学习笔记
      声明!学习视频来自B站up主**泷羽sec**有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[......
  • JavaAPI高级编程.集合框架
    集合框架1.集合框架的概念(1)集合框架实际上就是一个动态数组,与一般的对象数组不同,集合对象的内容可以任意扩充。(2)集合框架中的特征A.这种框架是高性能的B.框架必需允许不同的类型的类集以相同的方式和高度互操作方式工作C.类集必须是任意扩展和修改的集合框架常用接口(表......
  • Shell编程 - 判断篇
    1.字符串比较符运算符描述示例==等于["a"=="a"]为true!=不等于["a"!="a"]为false>大于,判断字符串时根据ASCII码表顺序,不常用在[]表达式中:[2>1]为true在[[]]表达式中:[[2>1]]为true在(())表达式中:((3>2))为true<小......
  • 学霸带你游戏化 Bash 数组提升编程效率
    数组在Bash脚本中的重要性在现代编程中,数组的灵活性和高效性使其成为处理数据的核心工具之一。尤其是在Bash脚本中,数组能够帮助开发者以简洁的方式管理和操作多个数据项。在游戏开发、系统管理等领域,数组的应用无处不在。从定义和初始化,到元素访问和操作,每一个环节都至关......
  • Javascript遍历目录时使用for..in循环无法获取Files对象和SubFolders对象问题的解决方
      1Javascript遍历目录时使用for..in循环无法获取Files对象和SubFolders对象1.1问题场景  在JavaScript中遍历目录,使用for..in循环时,无法获取到Files对象和SubFolders对象,导致无法遍历目录和子目录。  代码如下:functionGetAllFilesInSubFolder(path,filter)......
  • C++编程:通过简单实现理解CyberRT的DataVisitor和DataDispatcher
    文章目录0.引言1.定义DataVisitor接口2.实现DataDispatcher3.创建具体的DataVisitor4.类关系图5.测试示例6.编译和运行0.引言本文简单实现类似CyberRT的DataVisitor和DataDispatcher,使得数据能够被分发给多个订阅者(访客)。1.定义DataVisitor接......