当前位置: 首页 > news >正文

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的整数的目的,只是在对变量进行自增操作时使用了不同的语法形式,但它们的功能是等效的。

相关文章:

linux从0到1——shell编程7

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…...

自主研发,基于PHP+ vue2+element+ laravel8+ mysql5.7+ vscode开发的不良事件管理系统源码,不良事件管理系统源码

不良事件上报系统源码&#xff0c;不良事件管理系统源码&#xff0c;PHP源码 不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”&#xff0c;结合预存上百套已正在使用的模板&#xff0…...

【海思Hi3519DV500】双目网络相机套板硬件规划方案

Hi3519DV500双目网络相机套板是针对该芯片设计的一款 IP 编码板 PCBA&#xff0c;硬件接口支持双目sensor 接入&#xff0c;SDIO3.0 接口、USB2.0、USB3.0、UART 接口以及丰富的 IO 扩展应用&#xff0c;可根据各种使用场景设计相应扩展板&#xff0c;丰富外围接口&#xff0c;…...

【电源专题】BUCK电源SW电压的平均值为什么等于输出电压?

在Buck电源测试过程中,我们会去测试SW开关节点的波形。那么从SW波形中我们能看出什么呢? 首先查看SW波形一般会看SW频率,通过SW波形的频率知道目前芯片的运行状态是什么。比如PSM还是PWM模式。 此外,还会看SW波形的占空比,通过占空比我们可以知道目前输出的状态是怎么样的…...

SpringCloud Gateway转发请求到同一个服务的不同端口

SpringCloud Gateway默认不支持将请求路由到一个服务的多个端口 本文将结合Gateway的处理流程&#xff0c;提供一些解决思路 需求背景 公司有一个IM项目&#xff0c;对外暴露了两个端口8081和8082&#xff0c;8081是springboot启动使用的端口&#xff0c;对外提供一些http接口…...

【模块一】kubernetes容器编排进阶实战之pod的调度流程,pause容器及init容器

pod的调度流程及常见状态 pod的调度流 pod的常见状态 Unschedulable&#xff1a;#Pod不能被调度&#xff0c;kube-scheduler没有匹配到合适的node节点 PodScheduled&#xff1a;#pod正处于调度中&#xff0c;在kube-scheduler刚开始调度的时候&#xff0c;还没有将pod分配…...

PySpark3:pyspark.sql.functions常见的60个函数

目录 一、常见的60个函数 1、col 2、lit 3、sum 4、avg/mean 5、count 6、max 7、min 8、concat 9、substring 10、lower 11、upper 12、trim 13、ltrim 14、rtrim 15、split 16、explode 17、collect_list 18、collect_set 19、asc 20、desc 21、when 2…...

Python操作neo4j库py2neo使用之创建和查询(二)

Python操作neo4j库py2neo使用之创建和查询&#xff08;二&#xff09; py2neo 创建操作 1、连接数据库 from py2neo import Graph graph Graph("bolt://100.100.20.55:7687", auth(user, pwd), nameneo4j)2、创建Node from py2neo import Node, Subgraph # 创建…...

力扣11.23

1964. 找出到每个位置为止最长的有效障碍赛跑路线 你打算构建一些障碍赛跑路线。给你一个 下标从 0 开始 的整数数组 obstacles &#xff0c;数组长度为 n &#xff0c;其中 obstacles[i] 表示第 i 个障碍的高度。 对于每个介于 0 和 n - 1 之间&#xff08;包含 0 和 n - 1&…...

golang实现TCP服务器与客户端的断线自动重连功能

1.服务端 2.客户端 生成服务端口程序: 生成客户端程序: 测试断线重连: 初始连接成功...

数据结构 (6)栈的应用举例

1. 递归调用 递归函数在执行时&#xff0c;会将每一层的函数调用信息&#xff08;包括局部变量、参数和返回地址&#xff09;存储在栈中。当递归函数返回时&#xff0c;这些信息会从栈中弹出&#xff0c;以便恢复之前的执行状态。栈的后进先出&#xff08;LIFO&#xff09;特性…...

谁的年龄最小(结构体专题)

题目描述 设计一个结构体类型&#xff0c;包含姓名、出生日期。其中出生日期又包含年、月、日三部分信息。输入n个好友的信息&#xff0c;输出年龄最小的好友的姓名和出生日期。 输入描述 首先输入一个整数n(1<n<10)&#xff0c;表示好友人数&#xff0c;然后输入n行&…...

【论文笔记】LLaVA-KD: A Framework of Distilling Multimodal Large Language Models

Abstract 大语言模型(Large Language Models, LLM)的成功&#xff0c;使得研究者为了统一视觉和语言的理解去探索多模态大预言模型(Multimodal Large Language Models, MLLM)。 但是MLLM庞大的模型和复杂的计算使其很难应用在资源受限的环境&#xff0c;小型MLLM(s-MLLM)的表现…...

M|大脑越狱

rating: 7.0 豆瓣: 7.6 上映时间: “2015” 类型: M悬疑 导演: 约瑟夫怀特 Joseph White 主演: 亚历山大欧文 Alexander Owen爱德华富兰克林 Edward Franklin 国家/地区: 英国 片长/分钟: 20分钟 M&#xff5c;大脑越狱 想法不错&#xff0c;但是逻辑比较一般。属于…...

数据库编程(sqlite3)

一&#xff1a;数据库分类 常用的数据库 大型数据库 &#xff1a;Oracle商业、多平台、关系型数据库功能最强大、最复杂、市场占比最高的商业数据库 中型数据库 &#xff1a;Server是微软开发的数据库产品&#xff0c;主要支持windows平台 小型数据库 : mySQL是一个小型关系型…...

【C语言】关键字详解

【C语言】关键字详解 文章目录 [TOC](文章目录) 前言一、char1.定义字符串类型2.定义字符类型 二、short三、int四、long五、signed六、unsigned七、float八、double九、struct、union、enum十、void1.void用于函数声明&#xff0c;没有返回值的函数&#xff0c;其类型为 void。…...

什么是计算机网络

什么是计算机网络&#xff1f; 计算机网络的定义计算机网络的分类按覆盖范围分类按拓扑结构分类按通信传输介质分类按信号频带占用方式分类 计算机网络的功能信息交换资源共享分布式处理 计算机网络的组成计算机网络的定义计算机网络的分类按覆盖范围分类按拓扑结构分类按通信传…...

【大数据学习 | Spark-Core】Spark的分区器(HashPartitioner和RangePartitioner)

之前学过的kv类型上面的算子 groupby groupByKey reduceBykey sortBy sortByKey join[cogroup left inner right] shuffle的 mapValues keys values flatMapValues 普通算子&#xff0c;管道形式的算子 shuffle的过程是因为数据产生了打乱重分&#xff0c;分组、排序、join等…...

CSS3_BFC(十二)

BFC MDN对BFC的解释&#xff1a;块格式化上下文&#xff08;Block Formating Context, BFC&#xff09;是web页面的可视CSS渲染的一部分&#xff0c;是块盒子的布局过程发生的区域&#xff0c;也是浮动元素与其他元素交互的区域。 1、开启BFC flow-root对内容的影响是最低的&am…...

C0032.在Clion中使用MSVC编译器编译opencv的配置方法

使用MSVC编译器编译opencv的配置方法...

微信小程序中会议列表页面的前后端实现

题外话&#xff1a;想通过集成腾讯IM来解决即时聊天的问题&#xff0c;如果含语音视频&#xff0c;腾讯组件一年5万起步&#xff0c;贵了&#xff01;后面我们改为自己实现这个功能&#xff0c;这里只是个总结而已。 图文会诊需求 首先是个图文列表界面 同个界面可以查看具体…...

WEB攻防-通用漏洞文件上传二次渲染.htaccess变异免杀

知识点&#xff1a; 1、文件上传-二次渲染 2、文件上传-简单免杀变异 3、文件上传-.htaccess妙用 4、文件上传-PHP语言特性 1、上传后门时&#xff0c;文件内容带.就不行 这时可以上传一个转换后的ip地址&#xff0c;ip地址对应网站包含后门代码 转换后的int会在访问的时候…...

vue实现列表滑动下拉加载数据

一、实现效果 二、实现思路 使用滚动事件监听器来检测用户是否滚动到底部&#xff0c;然后加载更多数据 监听滚动事件。检测用户是否滚动到底部。加载更多数据。 三、案例代码 <div class"drawer-content"><div ref"loadMoreTrigger" class&q…...

全面解析:HTML页面的加载全过程(四)--浏览器渲染之样式计算

主线程遍历得到的 DOM 树&#xff0c;依次为树中的每个节点计算出它最终的样式&#xff0c;称之为 Computed Style。 通过前面生成的DOM 树和 CSSOM 树&#xff0c;遍历 DOM 树&#xff0c;为每一个 DOM 节点&#xff0c;计算它的所有 CSS 属性&#xff0c;最后会得到一棵带有…...

#Verilog HDL# 谈谈代码中如何跨层次引用

目录 一 先谈作用问题 二 再谈跨层次问题 2.1 向下引用 2.2 向上引用 一 先谈作用问题 大多数编程语言都有一个称为作用域(scope)的特征,它定义了代码的某些部分对于变量和方法的可见性。作用域定义了一个命名空间,以避免同一命名空间内不同对象名称之间的冲突。 V…...

LeetCode 每日一题 2024/11/18-2024/11/24

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 11/18 661. 图片平滑器11/19 3243. 新增道路查询后的最短距离 I11/20 3244. 新增道路查询后的最短距离 II11/21 3248. 矩阵中的蛇11/22 3233. 统计不是特殊数字的数字数量1…...

客户流失分析综述

引言 客户流失这个术语通常用来描述在特定时间或合同期内停止与公司进行业务往来的客户倾向性[1]。传统上&#xff0c;关于客户流失的研究始于客户关系管理&#xff08;CRM&#xff09;[2]。在运营服务时&#xff0c;防止客户流失至关重要。过去&#xff0c;客户获取相对于流失…...

基于51单片机的红包抽奖proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1nYZlLb64kdZAWSydT_uHfA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…...

cangjie (仓颉) vscode环境搭建

sdk下载 下载中心-仓颉编程语言官网 可选择半年更新版&#xff0c;不用申请。目前版本&#xff1a;0.53.13 &#xff0c;选择不同平台压缩包下载解压到任意位置即可 补充下载&#xff0c;vscode插件解压后&#xff0c;在vscode扩展中选择从vsix安装&#xff0c;安装后新增名为…...

阿里云私服地址

1.解压apache-maven-3.6.1-bin 2.配置本地仓库&#xff1a;修改conf/dettings.xml中的<localReoisitory>为一个指定目录。56行 <localRepository>D:\apache-maven-3.6.1-bin\apache-maven-3.6.1\mvn_repo</localRepository> 3.配置阿里云私服&#xff1a;…...