shell编程(8) until循环以及函数基本创建调用

声明!!!
学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章
视频链接:泷羽sec
笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负


# until循环

脚本代码:

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

脚本解释:

i=0
  • 这行代码将变量 i 初始化为 0。
until [ ! $i -lt 10 ]
  • until 是一种 循环控制结构,与 while 循环相似,但它会在条件表达式 不成立 时才执行循环体。即,循环会在条件为假时继续执行。
  • **[ ! $i -lt 10 ]**是条件测试。具体来说:
    • $i 表示变量 i 的值。
    • -lt 是 Bash 中用于比较大小的算术操作符,表示“less than”(小于)。
    • ! 是逻辑非操作符,表示取反。因此,[ ! $i -lt 10 ] 意味着“如果 i 不小于 10,则条件为真”。
  • 这个表达式的逻辑是:当 i >= 10 时,[ ! $i -lt 10 ] 条件为真,循环结束。因此,until 循环会继续执行,直到 i 达到 10。
doecho $i((i++))
done
  • dodone 定义了循环体,即循环中要执行的代码。
  • echo $i 会打印当前变量 i 的值。
  • ((i++)) 是一个 算术表达式,用于将 i 的值增加 1。((i++)) 等价于 i=$((i+1)),但它是更简洁的写法。

执行过程:

  1. 初始化 i=0
  2. 进入 until 循环,条件为 [ ! $i -lt 10 ]。此时 i=0$i -lt 10 为真,因此取反后 ! $i -lt 10 为假,循环继续。
  3. 执行 echo $i,输出当前的 i 值(此时为 0)。
  4. 执行 ((i++))i 增加 1,变为 1。
  5. 重复上述过程,直到 i 达到 10。
  6. i 等于 10 时,条件 [ ! $i -lt 10 ] 为真,循环结束。

运行结果:

在这里插入图片描述

case语句

脚本代码:

read -p "请您输入一个数值:" num
case $num in1)echo 您输入的数字是1;;2)echo 您输入的数字是2;;*)echo 您输入的是其他数字;;
esac

脚本解释:

  1. 读取用户输入:

    read -p "请您输入一个数值:" num
    
    • read 是用于从用户输入中读取值的命令。
    • -p 选项用于在用户输入之前显示提示信息。在这个脚本中,提示信息是 "请您输入一个数值:"
    • 用户输入的内容将被存储在变量 num 中。
  2. case 语句:

    case $num in
    
    • case 语句用于根据变量的值执行不同的代码块。这里它会检查 num 的值,并根据值的不同执行相应的代码。
  3. 条件匹配:

    • 第一个条件:

      1) echo 您输入的数字是1 ;;
      
      • 如果用户输入的数字是 1,则执行 echo 您输入的数字是1,即输出 您输入的数字是1
      • ;; 表示当前条件判断结束,脚本会跳出 case 语句并继续执行脚本。
    • 第二个条件:

      2) echo 您输入的数字是2 ;;
      
      • 如果用户输入的数字是 2,则执行 echo 您输入的数字是2,即输出 您输入的数字是2
      • 同样,;; 结束当前分支,跳出 case 语句。
    • 默认条件:

      *) echo 您输入的是其他数字 ;;
      
      • * 是一个通配符,表示任何其他的输入(即不为 12 的情况)。如果用户输入的数字既不是 1 也不是 2,则执行 echo 您输入的是其他数字,即输出 您输入的是其他数字
      • ;; 结束当前分支,跳出 case 语句。
  4. 结束 case 语句:

    esac
    
    • esaccase 语句的结束标志,它是 case 的倒写形式。表示条件判断的结束。

执行流程:

  1. 用户输入一个数字。
  2. 脚本通过**case**语句判断用户输入的数字,并执行相应的代码:
    • 如果用户输入的是 1,输出 您输入的数字是1
    • 如果用户输入的是 2,输出 您输入的数字是2
    • 如果用户输入的是其他数字,输出 您输入的是其他数字

运行结果:

在这里插入图片描述

基本函数

脚本代码(1):

DemoFunc() {echo "hello world"
}
DemoFunc

脚本解释:

1. 函数定义:

DemoFunc() {
  • 这行代码是定义一个名为 DemoFunc 的函数。() 括号表示这是一个函数的定义,而 {} 中包含的是该函数的主体,也就是该函数在被调用时会执行的操作。

  • 在 Bash 脚本中,函数定义的基本语法是:

    function_name() {# 函数体
    }
    

2. 输出语句:

  echo "hello world"
  • echo 是一个常用的 Bash 命令,用来将文本输出到终端或标准输出。
  • 在这个函数体内,echo "hello world" 会在函数被调用时打印出 "hello world" 字符串。

3. 函数结束:

}
  • 这行 } 表示函数定义的结束。

执行过程:

  1. 解析脚本时,Bash 会识别 DemoFunc 是一个函数,并且知道它的行为是输出 “hello world”。
  2. 如果脚本中包含对 DemoFunc 的调用,Bash 会跳转到函数定义处执行 echo "hello world",从而输出字符串 "hello world"

运行结果:

在这里插入图片描述

脚本代码(2):

DemoFunc() {echo "hello world"echo "My name is $1"
}
DemoFunc Sushiyi

脚本解释:

1. 函数定义:

DemoFunc() {
  • 这一行定义了一个名为 DemoFunc 的函数。() 中没有列出参数,表示函数可以接受任意数量的参数。

2. 输出第一行:

  echo "hello world"
  • 这一行使用 echo 输出字符串 "hello world",不依赖任何传入的参数。这个输出是固定的,每次调用函数时都会打印。

3. 输出第二行:

  echo "My name is $1"
  • 这一行输出**"My name is $1",其中$1**是脚本或函数传递给它的第一个参数。
    • 在 Bash 中,$1 表示传递给脚本或函数的第一个参数。例如,如果我们在调用时传递了 Sushiyi,那么 $1 就会被替换为 Sushiyi
    • 这个输出动态地显示传递给函数的第一个参数。

4. 函数结束:

}
  • 这行 } 表示 DemoFunc 函数的定义结束。

5. 函数调用:

DemoFunc Sushiyi
  • 这行代码调用了函数

    DemoFunc,并传递了一个参数**Sushiyi**。在函数内部:

    • 第一个 echo 语句会输出 "hello world"
    • 第二个 echo 语句会输出 "My name is Sushiyi",因为 Sushiyi 被传递为 $1 参数。

执行过程:

  1. 定义函数 DemoFunc:函数体内定义了两条 echo 命令,分别用于打印 "hello world""My name is \$1",其中 \$1 是函数的第一个参数。

  2. 调用函数:通过 DemoFunc Sushiyi 调用函数,并传递了字符串 Sushiyi 作为第一个参数($1)。

  3. 执行

    :在函数内部:

    • 第一个 echo "hello world" 执行,输出 "hello world"
    • 第二个 echo "My name is $1" 执行,$1 被替换为传递给函数的参数 Sushiyi,因此输出 "My name is Sushiyi"

运行结果:

在这里插入图片描述

脚本代码(3):

DemoFunc() {echo "hello world"echo "My name is $1,I'm $2 years old."
}
DemoFunc Sushiyi 20

脚本解释:

1. 定义函数 DemoFunc

DemoFunc() {echo "hello world"echo "My name is $1, I'm $2 years old."
}
  • DemoFunc() 是函数的定义,() 后面可以包含函数的参数,{} 中的部分是函数体。
  • 在函数体中有两条 **echo**命令:
    • 第一条 echo "hello world" 会输出 hello world
    • 第二条 echo "My name is $1, I'm $2 years old." 使用了 $1$2,这两个变量代表传给函数的第一个和第二个参数。

2. 调用函数 DemoFunc Sushiyi 20

DemoFunc Sushiyi 20
  • 这里调用了 **DemoFunc**函数,并传入了两个参数:
    • Sushiyi:会传给函数的第一个参数 $1
    • 20:会传给函数的第二个参数 $2

3. 执行结果

假设你运行这个脚本,输出会是:

Copy Codehello world
My name is Sushiyi, I'm 20 years old.

解释:

  • hello world 是在函数体中的第一条 echo 命令的输出。
  • 第二条 echo 命令会把传给函数的参数 Sushiyi20 插入到字符串中,输出 My name is Sushiyi, I'm 20 years old.

总结:

  • 该脚本首先定义了一个函数 DemoFunc,它接收两个参数。
  • 函数通过 echo 输出一段带有这两个参数的字符串。
  • 最后,脚本调用 DemoFunc 并传入实际参数 Sushiyi20,输出相应的内容。

运行结果:

hiyi, I’m 20 years old.


### 解释:- `hello world` 是在函数体中的第一条 `echo` 命令的输出。
- 第二条 `echo` 命令会把传给函数的参数 `Sushiyi` 和 `20` 插入到字符串中,输出 `My name is Sushiyi, I'm 20 years old.`。### 总结:- 该脚本首先定义了一个函数 `DemoFunc`,它接收两个参数。
- 函数通过 `echo` 输出一段带有这两个参数的字符串。
- 最后,脚本调用 `DemoFunc` 并传入实际参数 `Sushiyi` 和 `20`,输出相应的内容。## 运行结果:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/938774797d2043189187665c2b8c37cb.png)

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

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

相关文章

NVR管理平台EasyNVR多品牌NVR管理工具的流媒体视频融合与汇聚管理方案

随着信息技术的飞速发展,视频监控已经成为现代社会安全管理和业务运营不可或缺的一部分。无论是智慧城市、智能交通、还是大型企业、校园安防,视频监控系统的应用都日益广泛。NVR管理平台EasyNVR,作为功能强大的流媒体服务器软件,…

fastadmin实现站内通知功能

实现效果如下 application/admin/view/common/header.html <style>#notificationMenu {display: none;position: absolute;top: 40px;right: 0;background: #fff;border-radius: 6px;padding: 10px 0;width: 300px;box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);z-inde…

大语言模型---LoRA中损失值的计算

文章目录 概要损失计算流程小结 概要 Llama-7B模型的LoRA微调训练中&#xff0c;通过使用Cross-Entropy Loss来度量模型输出的预测分布和真实标签分布之间的距离&#xff0c;来衡量模型的准确性。 本文主要介绍LoRA中损失值的计算流程。 Cross-Entropy Loss作用&#xff1a;是…

【Vue】指令扩充(指令修饰符、样式绑定)

目录 指令修饰符 按键修饰符 事件修饰符 双向绑定指令修饰符 输入框 表单域 下拉框 单选按钮 复选框 样式绑定 分类 绑定class 绑定style tab页切换示例 指令修饰符 作用 借助指令修饰符&#xff0c;可以让指令的功能更强大 分类 按键修饰符&#xff1a;用来…

集成金蝶云星空数据至MySQL的完整案例解析

金蝶云星空数据集成到MySQL的技术案例分享 在企业信息化系统中&#xff0c;数据的高效流动和准确同步是确保业务连续性和决策支持的重要环节。本文将聚焦于一个具体的系统对接集成案例——金蝶云星空的数据集成到MySQL&#xff0c;方案名称为“2金蝶物料同步到商城中间表”。 …

为什么transformer的时间复杂度是N的平方,具体是里面的哪一个计算流程最占用时间

Transformer的时间复杂度为 O(N2)&#xff0c;其中 NN 是输入序列的长度。这一复杂度主要来源于自注意力机制&#xff08;self-attention mechanism&#xff09;的计算过程。 在Transformer模型中&#xff0c;自注意力机制的核心步骤是计算查询&#xff08;Query&#xff09;、…

如何在Linux上安装Canal同步工具

1. 下载安装包 所用到的安装包 canal.admin-1.1.4.tar.gz 链接&#xff1a;https://pan.baidu.com/s/1B1LxZUZsKVaHvoSx6VV3sA 提取码&#xff1a;v7ta canal.deployer-1.1.4.tar.gz 链接&#xff1a;https://pan.baidu.com/s/13RSqPinzgaaYQUyo9D8ZCQ 提取码&#xff1a;…

操作系统大会2024 | 麒麟信安根植openEuler社区,持续技术创新 共拓新应用 探索新机遇

[中国&#xff0c;北京&#xff0c;2024年11月15日] 以“以智能&#xff0c;致世界”为主题的操作系统大会2024在北京中关村国际创新中心召开&#xff0c;本次大会由openEuler社区和全球计算联盟主办&#xff0c;旨在汇聚全球产业界力量&#xff0c;推动基础软件根技术持续创新…

Wallpaper壁纸制作学习记录03

添加用户属性 Wallpaper Engine 允许用户在用户属性的帮助下进一步自定义您的壁纸。用户属性允许您为用户提供进一步调整和自定义壁纸各个方面的选项&#xff0c;包括完全隐藏壁纸中的对象。 创建可见性属性 每个元素在右上角都有一个 visibility 属性&#xff08;由眼睛图标…

杰理-gpadc

gpadc API是系统提供的用于adc采集的接口 void adc_init(); //adc功能初始化&#xff0c;一般在板级配置.c文件已经默认调用&#xff0c;用户无需再重复调用。 示例&#xff1a; static void WANG_printf(void *_arg) {//adc_init(); //板级配置中默认会调用&#xff0c;实际…

如何使用Jmeter做性能测试?

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 今天我们来说说jmeter如何进行性能测试&#xff0c;我们都知道jmeter工具除了可以进行接口功能测试外&#xff0c;还可以进行性能测试。当项目趋于稳定&#xf…

【CSP CCF记录】201903-1第16次认证 小中大

题目 样例1输入 3 -1 2 4 样例1输出 4 2 -1 样例1解释 4 为最大值&#xff0c;2 为中位数&#xff0c;−1 为最小值。 样例2输入 4 -2 -1 3 4 样例2输出 4 1 -2 样例2解释 4 为最大值&#xff0c;(−13)21为中位数&#xff0c;−2为最小值。 思路 本题两个注意点&#xff0…

windows下,用CMake编译qt项目,出现错误By not providing “FindQt5.cmake“...

开发环境&#xff1a;windows10 qt5.14&#xff0c; 编译器msvc2017x64&#xff0c;CMake3.30&#xff1b; 现象&#xff1a; CMakeList文件里&#xff0c;如有find_package(Qt5 COMPONENTS Widgets REQUIRED) target_link_libraries(dis_lib PRIVATE Qt5::Widgets) 用CMak…

自由学习记录(23)

Lua的学习 table.concat(tb,";") 如果表里带表&#xff0c;则不能拼接&#xff0c;表里带nil也不能&#xff0c;都会报错 true和false也不可以&#xff0c;数字和字符串可以 if要和一个end配对&#xff0c;所以 if a>b then return true end end 两个end …

JavaWeb-表格标签-06

表格标签 table code: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>表格标签</title><…

【Stable Diffusion】 超大尺寸绘制、分区控制,详解Tiled Diffusion VAE插件功能

今天&#xff0c;我们将向您介绍一款令人兴奋的AI工具——Tiled Diffusion & VAE插件。这是一款基于Stable Diffusion技术的创新应用&#xff0c;旨在为您提供超大尺寸绘制和分区控制的便捷体验。无论您是AI绘画的新手还是专业人士&#xff0c;这个工具都能为您带来极大的便…

【大数据分析机器学习】分布式机器学习

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

染色质重塑与心衰中的细胞间通讯机制:解读一篇Nature力作

染色质重塑与心衰中的细胞间通讯机制&#xff1a;解读一篇Nature力作 一、文献的主要行文思路与观点 在这篇发表在 Nature 的文章中&#xff0c;作者聚焦于心脏衰竭中的慢性炎症与纤维化问题&#xff0c;试图揭示免疫细胞与成纤维细胞之间的通讯机制。研究围绕以下几个核心问题…

WordPress添加类似说说、微博的时间轴微语页面

这个版本的WordPress可以直接使用&#xff0c;CSS样式可以完美兼容。效果如图 使用方法&#xff1a; 一、后台配置 新建微语功能 将下面的代码复制粘贴到主题的functions.php函数文件中&#xff0c;为WordPress添加微语功能。添加完成后&#xff0c;可以在WordPress后台菜单…

解决IDEA报包不存在,但实际存在的问题

前言 最近在把一个亿老项目交割给同事&#xff0c;同事在导入项目运行时遇到IDEA报包不存在&#xff0c;但实际存在的问题&#xff0c;最终通过以下方式解决 现象 在IDEA里启动运行项目&#xff0c;报某个类有问题&#xff0c;引入的包不存在。 点击这个引入的包&#xff0c;可…