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

news/2024/11/23 15:55:33/

声明!!!
学习视频来自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.ppmy.cn/news/1549318.html

相关文章

Hello-Go

Hello-Go 环境变量 GOPATH 和 GOROOT :不同于其他语言,go中没有项目的说法,只有包,其中有两个重要的路径,GOROOT 和 GOPATH Go开发相关的环境变量如下: GOROOT:GOROOT就是Go的安装目录&…

鸿蒙安全控件之粘贴控件简介

粘贴控件是一种特殊的系统安全控件,它允许应用在用户的授权下无提示地读取剪贴板数据。 在应用集成粘贴控件后,用户点击该控件,应用读取剪贴板数据时不会弹窗提示。可以用于任何应用需要读取剪贴板的场景,避免弹窗提示对用户造成…

C语言基础学习:抽象数据类型(ADT)

基础概念 抽象数据类型(ADT)是一种数据类型,它定义了一组数据以及可以在这组数据上执行的操作,但隐藏了数据的具体存储方式和实现细节。在C语言中,抽象数据类型(ADT)是一种非常重要的概念&…

远程jupyter lab的配置

打开虚拟环境 conda activate test 在环境下安装ipykernel软件包,这个软件包允许jupyter notebookl使用特定环境的python版本。 conda install ipykernel 将该环境添加到Jupyter Notebook中 python -m ipykernel install --user --nametest --display-name&quo…

redhat红帽社区知识库BUG案例免费查阅

一、前言 LINUX系统虽说在日常运行过程中很少出问题,相对比较稳定。但在维护海量设备时,都会可能遇到个别系统crash的故障。针对crash的问题,前面这篇文章有介绍到。 crash日志分析可参考这篇《LINUX常用工具之kdump》 LINUX常用工具之kdum…

外卖系统开发实战:从架构设计到代码实现

开发一套外卖系统,需要在架构设计、技术选型以及核心功能开发等方面下功夫。这篇文章将通过代码实例,展示如何构建一个基础的外卖系统,从需求梳理到核心模块的实现,帮助你快速掌握开发要点。 一、系统架构设计 一个完整的外卖系…

基于单片机的智能奶茶机设计(论文+源码)

1总体架构设计 本课题为基于单片机的智能奶茶机设计,其系统架构上设计如图2.1所示,整个系统包括了DS18B20温度传感器、继电器模块、LCD液晶、蜂鸣器、按键、STC89C52单片机等器件,在功能上用户可以通过按键键控制选择甜度和添加物以及设置温…

linux安装docker并配置docker源

linux安装docker linux安装docker并配置docker源准备工作安装依赖包设置阿里云docker-ce镜像源安装Docker CE测试Docker配置国内镜像重启 docker安装Docker可视化管理工具Portaine1.拉取镜像2.启动镜像3.访问Portainer客户端 常用命令 linux安装docker并配置docker源 本文用于…