shell8

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

复制代码
i=0
until [ ! $i -lt 10 ]
do
	echo $i
	((i++))
done
分析
  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 in
	pattern1)
		commands
		;;
	pattern2)
		commands
		;; 
	pattern3 | pattern4)
		commands
		;;
	*)
		default_commands
		;;
esac
  • $variable:要匹配的表达式或变量。
  • patternN) :定义匹配模式。每个模式后面跟着右括号)
  • commands :当 $variable 匹配到相应的模式时要执行的一系列命令。
  • ;;:结束一个模式和其对应的命令列表。
  • *|*) :通配符模式,用于处理所有不匹配前面任何模式的情况,类似于 switch-case 中的 default
  • esac :结束 case 语句。
简单的例子

假设你有一个脚本,它根据用户提供的参数执行不同的操作:

如果你不想option是定义的变量,那你可以使用read -p "请你选择:" option

复制代码
#!/bin/bash

option=start

case $option in
    start)
        echo "Starting..."
        ;;
    stop)
        echo "Stopping..."
        ;;
    restart)
        echo "Restarting..."
        ;;
    status)
        echo "Checking status..."
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        ;;
esac

外链图片转存中...(img-5C6YLcxO-1734696095973)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/06d33f8f8dc549d7a6290ea727cc297e.png) ##### 使用模式匹配 `case` 语句也支持简单的通配符模式匹配: #!/bin/bash file_extension=${1##*.} case $file_extension in txt|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`。

相关推荐
YuTaoShao2 分钟前
Java八股文——MySQL「存储引擎篇」
java·开发语言·mysql
AI风老师4 分钟前
通信网络基础概念
开发语言·网络·php
王德博客13 分钟前
【Java课堂笔记】Java 入门基础语法与面向对象三大特性详解
java·开发语言
wkj00131 分钟前
接口实现类向上转型和向上转型解析
java·开发语言·c#
炎码工坊1 小时前
DevSecOps实践:用Terraform策略检查筑牢基础设施安全防线
网络安全·微服务·云原生·系统安全·安全架构
寒士obj1 小时前
类加载的过程
java·开发语言
无名之逆1 小时前
大三自学笔记:探索Hyperlane框架的心路历程
java·开发语言·前端·spring boot·后端·rust·编程
hweiyu001 小时前
tomcat指定使用的jdk版本
java·开发语言·tomcat
梦境虽美,却不长1 小时前
C语言 学习 宏命令(预处理) 2025年6月9日14:41:39
c语言·开发语言·学习
橘子夏与单车少年k2 小时前
疏锦行Python打卡 DAY 27 函数专题2:装饰器
开发语言·python