linux从0到1——shell编程7

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)

在Shell编程中,while 语句用于在给定的条件为真时重复执行某一段代码。其语法格式如下:

while [condition]
do
  # commands to be executed as long as the condition is true
done

1. 语法解析

  • while: 表示循环的开始,后面跟一个条件。
  • [condition]: 这是一个条件表达式,可以是任何有效的测试条件,通常使用 [ 和 ] 来表示条件。条件的返回值决定了是否继续循环。Shell 会根据条件的返回码来判断:如果返回值为 0,则条件为真;如果返回值非 0,则条件为假。
  • do: 在条件为真时执行的命令块的开始。
  • done: 结束 while 循环的标志。

2. 示例

基本示例

打印数字 1 到 5:

#!/bin/bash

i=1
while [ $i -le 5 ]
do
  echo $i
  ((i++))  # 递增i
done

输出:

解释:

  • 初始时,变量 i 的值是 1。
  • while 循环检查 i 是否小于等于 5。
  • 如果条件为真,则执行 echo $i 打印出当前的数字,并通过 ((i++)) 将 i 的值递增。
  • 循环继续直到 i 的值大于 5。

另一个示例:读取用户输入

不断读取用户输入直到用户输入 "exit":

#!/bin/bash

while true
do
  echo "请输入一个命令(输入 'exit' 退出):"
  read input
  if [ "$input" == "exit" ]; then
    echo "退出程序。"
    break  # 使用 break 退出循环
  fi
  echo "你输入的命令是:$input"
done

解释:

  • while true 是一个永真条件,意味着循环会一直执行,直到 break 语句触发退出。
  • 每次输入后,通过 read 命令读取用户的输入。
  • 如果输入为 "exit",则通过 break 跳出循环。

3. 常见条件表达式

在 while 语句中,条件通常会用到各种测试条件,最常见的有:

  • 数值比较:
    • -eq 等于
    • -ne 不等于
    • -gt 大于
    • -lt 小于
    • -ge 大于或等于
    • -le 小于或等于

示例:检查数字是否大于 10:
i=5
while [ $i -le 10 ]
do
  echo $i
  ((i++))
done

  • 字符串比较:
    • = 检查两个字符串是否相等
    • != 检查两个字符串是否不相等
    • -z 检查字符串是否为空
    • -n 检查字符串是否非空

示例:检查输入字符串是否为 "yes":
while true
do
  read -p "Do you want to continue? (yes/no): " answer
  if [ "$answer" == "no" ]; then
    echo "退出循环"
    break
  fi
done

4. 结束循环

除了通过条件表达式控制循环结束外,还可以使用以下方法显式地终止循环:

  • break:立即退出循环。
  • continue:跳过本次循环中的剩余部分,进入下一次循环。

5. while 和文件读取

while 循环常用于逐行读取文件内容:

#!/bin/bash

while read line
do
  echo $line
done < input_file.txt

解释:

  • read line 会逐行读取文件 input_file.txt,直到文件结束。
  • 每次读取一行内容并打印。

6. 退出条件

如果不使用 break,循环会根据条件判断继续进行。当条件不满足时,while 循环自然结束。

总结

  • while 循环可以执行重复的任务,直到某个条件变为假。
  • 条件的判断依据是命令的退出状态(0 为真,非 0 为假)。
  • 可以结合数值比较、字符串比较、文件读取等多种方式灵活使用。

while循环代码1

i=1

while (( $i<=10))

do

     ehco $i

               ((i++))

done

首先通过i=1这一行,将变量i初始化为1,为后续的循环操作确定起始值。

循环条件判断:

while((Si<=10))是循环的条件判断部分。这里使用了双括号(())语法,它用于进行算术表达式的计算和判断。在每次循环开始前,都会检查|的值是否小等宇10。只要这个条件满定,循环体内部的代码就会被执行。

循环体执行内容:

在循环体内部,首先通过echo $i这一行,将当前i的值输出到控制台,这样就可以看到循环过程中;的变化情况。

接着,通过((i++))这一语句对变量i进行自增操作。这里的(C))语法同样用手算运算,1++表示将|的值增加1。每次循环结束后、的值就会比上一次循环时增加1,以便在下次循开始时进行新的条件判断。

while循环代码2

i=1

while (( $i<=10 ))

do 

     echo $i

     let "i++"

done

变量初始化与循环条件判断:

这部分和第一种实现方式完全相同。先是通过i=1初始化变量i,然后通过,while((Si<=10))来判断循环是否继续进行克要i的值小等于10,循环就会持续。

循环体执行内容:

同样,在循环体中首先通过 echo Si输出当前i的值。

不同之处在手对变量;进行自增操作的语句。这里使用了let 命令,let “i++"的作用也是将变量i的值增加1。let 命令用于执行算术运算,它可以接受一个或多个算术表达式作为参数,

并对相关变量进行相应的运算操作。

总的来说,这两种实现方式都能达到通过while 循环输出1到10的整数的目的,只是在对变量进行自增操作时使用了不同的语法形式,但它们的功能是等效的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/921421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据科学与SQL:组距分组分析 | 区间分布问题

目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 绝对值分布分析也可以理解为组距分组分析。对于某个指标而言&#xff0c;一个记录对应的指标值的绝对值&#xff0c;肯定落在所有指标值的绝对值的最小值和最大值构成的区间内&#xff0c;根据一定的算法&#x…

大数据调度组件之Apache DolphinScheduler

Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 主要特性 易于部署&#xff0c;提供四种部署方式&#xff0c;包括Standalone、Cluster、Docker和…

使用 前端技术 创建 QR 码生成器 API1

前言 QR码&#xff08;Quick Response Code&#xff09;是一种二维码&#xff0c;于1994年开发。它能快速存储和识别数据&#xff0c;包含黑白方块图案&#xff0c;常用于扫描获取信息。QR码具有高容错性和快速读取的优点&#xff0c;广泛应用于广告、支付、物流等领域。通过扫…

Hash table类算法【leetcode】

哈希表中关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素 那么哈希表能解决什么问题呢&#xff0c;一般哈希表都是用来快速判断一个元素是否出现集合里。 例如要查询一个名字是否在这所学校里。 要枚举的话时间复杂度是O(n)&#xff0c;但如果使用哈希…

UI自动化测试中公认最佳的设计模式-POM

一、概念 什么是POM&#xff1f; POM是PageObjectModule&#xff08;页面对象模式&#xff09;的缩写&#xff0c;其目的是为了Web UI测试创建对象库。在这种模式下&#xff0c;应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元…

Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f; 100…

Python数据结构day2

一、链表 1.1目的 解决顺序表存储数据有上限&#xff0c;并且插入和删除操作效率低的问题 1.2概念 链表&#xff1a;链式存储的线性表&#xff0c;使用随机物理内存存储逻辑上连续的数据 链表的组成&#xff1a;由一个个结点组成 结点&#xff1a;由数据域和链接域组成&a…

【经纬度转地址实现方案】根据给定的经纬度,查询对应城市,通过建立经纬度geohash-行政区映射表,实现快速查询

文章目录 背景目标方案设计&#xff1a;表结构设计&#xff1a;方案实现1.高德API获取行政区边界点2.外包矩形中心作为中心点3.坐标点经纬度转换为geohash 测试建表语句测试造数测试用例测试结果 总结总结 背景 最近遇到一个需求&#xff0c;需要查询给定的经纬度坐标点&#…

解锁业务成功:大数据和 AI 如何协作以释放战略洞察

在当今这个数据主导的时代&#xff0c;大数据与AI的协同作用对于寻求竞争优势的组织而言愈发关键。大数据以其庞大的数据量、多样化的数据类型以及高速的数据生成能力&#xff0c;为AI算法提供了丰富的原材料&#xff0c;助力其挖掘出有价值的洞见&#xff0c;推动明智决策的制…

LINUX系统编程之——环境变量

目录 环境变量 1、基本概念 2、查看环境变量的方法 三、查看PATH环境变量的內容 1&#xff09;不带路径也能运行的自己的程序 a、将自己的程序直接添加到PATH指定的路径下 b、将程序所在的路径添加到PATH环境中 四、环境变量与本地变量 1、本地变量创建 2、环境变量创…

QT:QListView实现table自定义代理

介绍 QListVIew有两种切换形式&#xff0c;QListView::IconMode和QListView::ListMode&#xff0c;通过setViewMode()进行设置切换。因为QListView可以像QTreeView一样显示树形结构&#xff0c;也可以分成多列。这次目标是将ListView的ListMode形态显示为table。使用代理&…

IDEA2023 创建SpringBoot项目(一)

一、Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。 二、快速开发 1.打开IDEA选择 File->New->Project 2、…

初级数据结构——树

目录 前言一、树的基本概念二、二叉树三、树的表示方法四、树的遍历树的代码模版五、经典例题[2236. 判断根结点是否等于子结点之和](https://leetcode.cn/problems/root-equals-sum-of-children/description/)代码题解 六、总结结语 前言 从这一期开始数据结构开始有那么一点…

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色&#xff0c;类似材质丢失 Addressable Play Mode Script加载模式 选择 Use Existiing Build 1.Unity 切换到 PC 平台&#xff0c;执行 Addressable Build 运行&#xff0c;加载 bundle 内的预制体 显示正常 2.Unit…

视频去重工具

视频去重工具 工具截图 下载 回复&#xff1a;“0028”&#xff0c;即可自动获取

javascrip页面交互

元素的三大系列 offset系列 offset初相识 offset系列属性 作用 element.offsetParent 返回作为该元素带有定位的父级元素&#xff0c;如果父级没有定位&#xff0c;则返回body element.offsetTop 返回元素相对于有定位父元素上方的偏移量 element.offsetLeft 返回元素…

win10中使用ffmpeg和MediaMTX 推流rtsp视频

在win10上测试下ffmpeg推流rtsp视频&#xff0c;需要同时用到流媒体服务器MediaMTX 。ffmpeg推流到流媒体服务器MediaMTX &#xff0c;其他客户端从流媒体服务器拉流。 步骤如下&#xff1a; 1 下载MediaMTX github: Release v1.9.3 bluenviron/mediamtx GitHub​​​​​…

el-select 和el-tree二次封装

前言 本文章是本人在开发过程中&#xff0c;遇到使用树形数据&#xff0c;动态单选或多选的需求&#xff0c;element中没有这种组件&#xff0c;故自己封装一个&#xff0c;欢迎多多指教 开发环境&#xff1a;element-UI、vue2 组件效果 单选 多选 组件引用 <treeselec…

STM32-- keil常见报错与解决办法

调试问题 1. keil在线调试需要点击好几次运行才可以运行&#xff0c;要是直接下载程序直接就不运行。 解决&#xff1a;target里面的use microlib要勾选&#xff0c;因为使用了printf。 keil在线调试STM32&#xff0c;点三次运行才能跑到main的问题解决。 keil在线调试STM32…

RNN简单理解;为什么出现Transformer:传统RNN的问题;Attention(注意力机制)和Self-Attention(自注意力机制)区别;

目录 RNN简单理解 RNN n to n Transformer N to M LSTM 为什么出现Transformer:传统RNN的问题 信息丢失的后果 Rnn是顺序执行的效率不高:顺序执行 Attention(注意力机制)和Self-Attention(自注意力机制)区别 一、计算对象不同 二、应用场景不同 三、功能差异…