shell8

until循环(条件为假的时候一直循环和while相反)

i=0
until [ ! $i -lt 10 ]
doecho $i((i++))
done

[外链图片转存中...(img-Ia9db1VH-1734696095965)]

分析
  1. 初始化变量
    • i=0:将变量i初始化为0。
  2. 条件判断 (until 循环)
    • until [ ! $i -lt 10 ]:这里的逻辑有些复杂。它使用了until循环,这意味着循环体将会一直执行,直到条件 [ ! $i -lt 10 ] 为真。
    • 条件内部包含了两个部分:
      • !:这是一个逻辑非操作符,它反转了后续表达式的真假值。
      • $i -lt 10:这是检查i是否小于10的条件。
    • 因此,[ ! $i -lt 10 ]实际上是在说:“当i不小于10时”。换句话说,只要i小于10,条件就为假,循环就会继续;一旦i达到或超过10,条件变为真,循环就会终止。
  3. 循环体
    • echo $i:输出当前的i值。
    • ((i++)):对i进行自增操作,每次循环后i都会加1。
  4. 结束循环 (done)
    • done:标志着until循环的结束

case语句

case 语句是 Bash 和其他 Unix shell 中的一种多分支选择结构,它提供了一种方便的方式来匹配一个值(通常是变量或命令的输出)与多个可能的模式。这在需要根据不同的输入执行不同代码块的情况下非常有用。

case 语句的基本语法

case $variable inpattern1)commands;;pattern2)commands;; pattern3 | pattern4)commands;;*)default_commands;;
esac
  • $variable:要匹配的表达式或变量。
  • patternN):定义匹配模式。每个模式后面跟着右括号)
  • commands:当 $variable 匹配到相应的模式时要执行的一系列命令。
  • ;;:结束一个模式和其对应的命令列表。
  • *|*):通配符模式,用于处理所有不匹配前面任何模式的情况,类似于 switch-case 中的 default
  • esac:结束 case 语句。
简单的例子

假设你有一个脚本,它根据用户提供的参数执行不同的操作:
如果你不想option是定义的变量,那你可以使用read -p "请你选择:" option

#!/bin/bashoption=startcase $option instart)echo "Starting...";;stop)echo "Stopping...";;restart)echo "Restarting...";;status)echo "Checking status...";;*)echo "Usage: $0 {start|stop|restart|status}";;
esac

[外链图片转存中…(img-5C6YLcxO-1734696095973)在这里插入图片描述

使用模式匹配

case 语句也支持简单的通配符模式匹配:

#!/bin/bashfile_extension=${1##*.}case $file_extension intxt|text)echo "Text file";;jpg|jpeg|png|gif)echo "Image file";;mp3|wav|flac)echo "Audio file";;*)echo "Unknown file type";;
esac

在这个例子中,${1##*.} 提取了文件名的扩展名部分,并使用 case 语句来识别文件类型。

基本函数学习

一个函数我们要怎么创建怎么引用

创建函数

你可以通过以下方式定义一个函数:

function_name() {# 函数体,这里是命令或代码块
}

或者,如果你喜欢更明确地指出这是一个函数,可以使用 function 关键字(这在某些版本的 Bash 中是可选的):

function function_name {# 函数体,这里是命令或代码块
}
示例:创建一个简单的函数
DemoFunc() {echo "hello world"
}

在这个例子中,DemoFunc 是一个函数名,当它被调用时,会执行函数体内的一系列命令,在这里就是打印 hello world 到标准输出。

引用(调用)函数

一旦定义了函数,你就可以通过函数名来调用它,后面不需要括号,除非你打算传递参数给函数。如果函数需要参数,可以在调用时将它们放在函数名后面的括号内。

示例:调用函数
DemoFunc

这行代码将调用 DemoFunc 函数,并执行其内部的命令。

传递参数给函数

你可以向函数传递参数,这些参数可以在函数体内通过 $1, $2, 等等来引用。$# 可以用来获取传递给函数的参数数量,而 $@$* 可以用来引用所有参数。

示例:带参数的函数
GreetUser() {echo "Hello, $1!"
}GreetUser "Alice"  # 调用函数并传递参数 "Alice"

在这个例子中,GreetUser 函数接受一个参数,并使用它来个性化问候消息。

返回值

Bash 函数可以通过 return 语句返回一个整数值,通常用于表示函数执行的状态。默认情况下,函数返回最后一条命令的退出状态。如果你想返回非整数数据,可以使用 echo 或其他形式的标准输出,并在调用处使用命令替换(如 $(...))来捕获输出。

示例:返回值
AddNumbers() {local sum=$(( $1 + $2 ))echo $sum  # 使用 echo 输出结果
}result=$(AddNumbers 5 3)  # 捕获函数的输出
echo "The result is $result"

在这个例子中,AddNumbers 函数接收两个参数并将它们相加,然后通过 echo 输出结果。调用时,我们使用命令替换来捕获函数的输出,并将其赋值给变量 result

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【游戏中orika完成一个Entity的复制及其Entity异步落地的实现】 1.ctrl+shift+a是飞书下的截图 2.落地实现

一、orika工具使用 1)工具类 package com.xinyue.game.utils;import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory;/*** author 王广帅* since 2022/2/8 22:37*/ public class XyBeanCopyUtil {private static MapperFactory mappe…

frp内网穿透笔记

文章目录 一、环境介绍二、配置过程2.1 下载文件2.3 服务器A的配置2.3 目标机B的配置2.4 电脑C怎么用 三、问题汇总 一、环境介绍 带公网的vps服务器A,需要穿透到的无公网目标电脑B,以及一台需要通过公网访问B的电脑C。frp 0.47.0:frp_0.47.…

PostgreSQL的交互式终端使用一系列命令来获取有关文本搜索配置对象的信息

在 psql(PostgreSQL 的交互式终端)中,你可以使用一系列命令来获取有关文本搜索配置对象的信息。这些命令主要围绕 \dF 系列,以及使用 SQL 查询 pg_ts_config 系统视图。以下是你可以使用的一些方法: 使用 \dF 系列命令…

写定制程序容易遇见的问题(FLASH不够时)

做了一个关于定制两条串口协议的活,主要是要在源代码基础上进行修改。源代码只剩了200多字节flash。本来最初我的想法很奇特,用结构体来模仿寄存器的写法。当我写完几行代码后,编译链接,立马就报CODE内存超了。 然后最终还是选择…

【Leetcode 热题 100 - 扩展】303. 区域和检索 - 数组不可变

问题背景 给定一个整数数组 n u m s nums nums,处理以下类型的多个查询: 计算索引 l e f t left left 和 r i g h t right right(包含 l e f t left left 和 r i g h t right right)之间的 n u m s nums nums 元素的 和 &a…

本地缓存和Redis缓存 存储更新时间的更新套路

//先获取redis key和local key //从reids中获取数据 – 为空 先设置redis缓存30天,value为当前时间 然后设置本地缓存,value为当前时间 从数据库里读数据 – 不为空 获取本地缓存时间 if本地缓存时间 < redis缓存时间(认为已更新)或者本地为空 从数据库读数据 else 从本地缓…

处理错误的两种方式:try...catch 与 then...catch

一、try...catch try...catch 是一种用于捕获和处理同步代码中异常的机制。其基本结构如下&#xff1a; try {// 可能会抛出异常的代码 } catch (error) {// 处理异常 }使用场景&#xff1a; 主要用于同步代码&#xff0c;尤其是在需要处理可能抛出的异常时。适用于函数调用…

【十进制整数转换为其他进制数——短除形式的贪心算法】

之前写过一篇用贪心算法计算十进制转换二进制的方法&#xff0c;详见&#xff1a;用贪心算法计算十进制数转二进制数&#xff08;整数部分&#xff09;_短除法求二进制-CSDN博客 经过一段时间的研究&#xff0c;本人又发现两个规律&#xff1a; 1、不仅仅十进制整数转二进制可…

【Harmony Next】多个图文配合解释DevEco Studio工程中,如何配置App相关内容,一次解决多个问题?

解决App配置相关问题列表 1、Harmony Next如何配置图标&#xff1f; 2、Harmony Next如何配置App名称&#xff1f; 3、Harmony Next如何配置版本号&#xff1f; 4、Harmony Next如何配置Bundle ID? 5、Harmony Next如何配置build号&#xff1f; 6、Harmony Next多语言配置在哪…

Mybatis分页插件的使用问题记录

项目中配置的分页插件依赖为 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.7</version></dependency>之前的项目代码编写分页的方式为&#xff0c;通过传入的条件…

Anthropic 工程师关于提示词工程的深入探讨

李玉光 北京聚云科技有限公司 联合创始人兼首席架构师 拥有 12 年以上的 Amazon Web Services 开发与架构经验。擅长设计和实施大规模、高弹性、自动化的云原生解决方案。云成本优化方面经验丰富&#xff0c;帮助众多企业有效降低云使用成本。并协助各类行业客户利用 Amazon We…

SpringBoot之validation参数校验并返回统一格式提示

前言 在日常的开发过程中&#xff0c;后端需要经常对参数进行校验&#xff0c;比如某参数不能为空&#xff0c;格式等&#xff0c;只有校验通过后才可以执行后续的业务逻辑&#xff0c;否则就要在接口返回错误信息给前端。 一般情况下&#xff0c;可以使用if…else…来校验参数…

【技术干货】移动SDK安全风险及应对策略

移动SDK&#xff08;软件开发工具包&#xff09;已经成为应用开发中不可或缺的一部分。通过SDK&#xff0c;开发者能够快速集成分析、广告调度、音视频处理、社交功能和用户身份验证等常见功能&#xff0c;而无需从零开始构建。这不仅能节省时间和资源&#xff0c;还能提高开发…

MATLAB中cvx工具箱的使用

CVX 是 MATLAB 中一个用于解决凸优化问题的建模工具箱。它使得定义、求解和分析凸优化问题变得简单。CVX 允许用户用类似数学表达的方式编写凸优化问题&#xff0c;而不需要过多关注底层的优化算法。CVX 的核心功能是将一个简单的数学问题转化为 MATLAB 可以理解并求解的标准形…

易语言OCR银行卡文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

新能源汽车充电需求攀升,智慧移动充电服务有哪些实际应用场景?

在新能源汽车行业迅猛发展的今天&#xff0c;智慧充电桩作为支持这一变革的关键基础设施&#xff0c;正在多个实际应用场景中发挥着重要作用。从公共停车场到高速公路服务区&#xff0c;从企业园区到住宅小区&#xff0c;智慧充电桩不仅提供了便捷的充电服务&#xff0c;还通过…

QT多媒体开发(一):概述

Qt Multimedia 模块为多媒体编程提供支持。多媒体编程实现的功能主要包括播放音频和视频文件&#xff0c;通过麦克风录制音频&#xff0c;通过摄像头拍照和录像等。 QT6 中多媒体模块相比QT5变化较大&#xff0c;所以用QT6编译 QT5写的多媒体 程序基本无法通过。 Qt 5 多媒体模…

道可云人工智能元宇宙每日资讯|浙江工商大学发布“人工智能时代创新型人才培养行动计划”

道可云元宇宙每日简报&#xff08;2024年12月20日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 浙江工商大学发布“人工智能时代创新型人才培养行动计划” 12月18日&#xff0c;浙江工商大学发布了《人工智能时代创新型人才培养行动计划》&#xff0c;提出人工…

Unity 上好用的插件

PlayerMaker BehaviorDesigner Cinemachine Timeline Hybrid Addressable AssetBundle Blower Simple Zoom 大地图上缩放和平移使用ScrollRect的好效果实现

BFS最短路径问题模板题

//输入格式 //输入包含10行&#xff0c;每行10个字符&#xff0c;描述这个农场的布局。输入保证图案中恰有一个字符 B、一个字符 L 以及一个字符 R。 //输出格式 //输出一个整数&#xff0c;为组成一条从B到L的的最短路径&#xff08;避开R&#xff09;。 //https://www.luogu.…