Shell学习(5/6) 流程控制-函数

Shell入门基础学习笔记 1.基本语法(1)定义变量:变量=值(2)撤销变量:unset 变量(3)声明静态变量:readonly变量,注意:不能unset2.变量定义规则(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。2)等号两侧不能有空格(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。(4)变量的值如果有空格,需要使用双引号或单引号括起来。3.案例实操(1)定义变量A5(2)给变量A重新赋值8(3)撤销变量A(4)声明静态的变量B=2,不能unset。 阅读详情

九、流程控制

Shell 脚本支持常见的流程控制结构,如条件判断、循环和分支选择。

1. 条件判断

条件判断用于根据条件执行不同的代码块。Shell 中最常用的条件判断语句是 if。

1.1 if 语句

基本语法
if [ 条件 ]; then
    # 条件为真时执行的代码
elif [ 其他条件 ]; then
    # 其他条件为真时执行的代码
else
    # 所有条件为假时执行的代码
fi

注意:sh 的流程控制不可为空,如果 else 分支没有语句执行,就不要写这个 else。

示例
#!/bin/bash

age=18

if [ "$age" -lt 18 ]; then
    echo "未成年"
elif [ "$age" -eq 18 ]; then
    echo "刚成年"
else
    echo "成年"
fi

条件表达式
  • 数值比较:
    • -eq:等于
    • -ne:不等于
    • -gt:大于
    • -ge:大于等于
    • -lt:小于
    • -le:小于等于
  • 字符串比较:
    • =:等于
    • !=:不等于
    • -z:字符串长度为 0
    • -n:字符串长度不为 0
  • 文件测试:
    • -e:文件存在
    • -f:是普通文件
    • -d:是目录
    • -r:文件可读
    • -w:文件可写
    • -x:文件可执行

1.2 case 语句

case 语句用于多分支选择,类似于其他语言中的 switch。

基本语法
case 变量 in
    模式1)
        # 匹配模式1时执行的代码
        ;;
    模式2)
        # 匹配模式2时执行的代码
        ;;
    *)
        # 默认情况
        ;;
esac
示例
#!/bin/bash

fruit="apple"

case "$fruit" in
    "apple")
        echo "这是苹果"
        ;;
    "banana")
        echo "这是香蕉"
        ;;
    *)
        echo "未知水果"
        ;;
esac


2. 循环

循环用于重复执行一段代码,直到满足某个条件。Shell 支持 for、while 和 until 循环。

2.1 for 循环

基本语法
for 变量 in 列表; do
    # 循环体
done
示例
#!/bin/bash

for i in 1 2 3 4 5; do
    echo "当前值: $i"
done

遍历文件
for file in *.txt; do
    echo "处理文件: $file"
done

当前目录下有一个 test.txt


2.2 while 循环

while 循环在条件为真时重复执行代码。

基本语法
while [ 条件 ]; do
    # 循环体
done
示例
#!/bin/bash

count=0

while [ "$count" -lt 5 ]; do
    echo "当前计数: $count"
    count=$((count + 1))
done
  • $(( )) 是进行算术运算时的正确语法。
  • $() 是用来执行命令替换,获取命令输出的结果。


2.3 until 循环

until 循环在条件为假时重复执行代码,直到条件为真。

基本语法
until [ 条件 ]; do
    # 循环体
done
示例
#!/bin/bash

count=0

until [ "$count" -ge 4 ]; do
    echo "当前计数: $count"
    count=$((count + 1))
done


2.4 循环控制

  • break:退出循环。
  • continue:跳过当前迭代,进入下一次循环。
示例
#!/bin/bash

for i in {1..10}; do
    if [ "$i" -eq 5 ]; then
        break  # 退出循环
    fi
    echo "当前值: $i"
done


十、函数

在 Shell 脚本中,函数是一种将代码封装为可重用块的方式。

1. 函数的定义

Shell 函数的定义有两种方式:

1.1 使用 function 关键字

function 函数名 {
    # 函数体
}

1.2 使用 () 定义

函数名() {
    # 函数体
}
示例
# 方式 1
function greet {
    echo "Hello, World!"
}

# 方式 2
greet() {
    echo "Hello, World!"
}

2. 函数的调用

定义函数后,可以通过函数名直接调用。

示例
greet() {
    echo "Hello, World!"
}

# 调用函数
greet


3. 函数的参数

Shell 函数可以接收参数。在函数内部,通过 $1、$2、$3 等访问参数。

  • $1:第一个参数
  • $2:第二个参数
  • $#:参数个数
  • $@:所有参数列表
  • $*:所有参数作为一个字符串
示例
greet() {
    echo "Hello, $1!"
}

# 调用函数并传递参数
greet "Alice"
greet "Bob"


4. 函数的返回值

Shell 函数可以通过 return 返回一个整数值(0-255),或者通过 echo 返回字符串。

4.1 使用 return 返回值

  • return 只能返回整数值。
  • 调用函数后,通过 $? 获取返回值。
示例
add() {
    local sum=$(( $1 + $2 ))
    return $sum
}

add 3 5
echo "结果是: $?"

4.2 使用 echo 返回值

  • echo 可以返回字符串或任意值。
  • 调用函数后,通过 $(函数名) 捕获返回值。


5. 局部变量

在函数内部定义的变量默认是全局的。如果希望变量只在函数内部使用,可以使用 local 关键字定义局部变量。

示例
greet() {
    local name="Alice"
    echo "Hello, $name!"
}

greet
echo "Name outside function: $name"  # 这里 $name 为空


6. 函数的嵌套

Shell 函数可以嵌套调用,即在一个函数内部调用另一个函数。

示例
greet() {
    echo "Hello, $1!"
}

introduce() {
    greet "$1"
    echo "I am a Shell script."
}

introduce "Alice"


7. 递归函数

Shell 函数支持递归调用,即函数调用自身。

示例:计算阶乘
factorial() {
    if [ "$1" -le 1 ]; then
        echo 1
    else
        local prev=$(factorial $(( $1 - 1 )))
        echo $(( $1 * prev ))
    fi
}

result=$(factorial 5)
echo "5 的阶乘是: $result"


8. 函数的返回值与状态码

  • 函数默认返回最后一条命令的退出状态码。
  • 可以通过 return 显式返回状态码(0 表示成功,非 0 表示失败)。
示例
check_file() {
    if [ -f "$1" ]; then
        echo "文件 $1 存在"
        return 0
    else
        echo "文件 $1 不存在"
        return 1
    fi
}

check_file "test.txt"
if [ "$?" -eq 0 ]; then
    echo "文件检查成功"
else
    echo "文件检查失败"
fi

Shell 流程控制 为多选择语句,与其他语言中的 switch ... case 语句类似,是一种多分支选择结构,每个 case 分支用右圆括号开始,用两个分号;表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。,每一模式必须以右括号结束。condition 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。continue 命令与 break 命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。 阅读详情

相关推荐

Shell test 命令和Shell 流程控制

Shell test 命令和Shell 流程控制

98年热爱开发的前后端开发工程师! 985

Shell流程控制

shell的流程控制不可为空 一、if语句 (一)if if 语句语法格式: if condition; then command fi 写成一行: if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi 末尾的 fi 就是 if 倒过来 (二)if else if else 语法格式: if condition; then command else command fi (三)if else-if el

void的博客 808

shell学习

用括号来表示数组,数组元素用"空格"符号分割开。数组名=(值1 值2 ... 值n)可以不使用连续的下标,而且下标的范围没有限制。

fangqi20170515的博客 946

循环语句(for、while、until.....)

循环语句循环语句一、for循环语句㈠ 列表循环㈡ 不带列表循环二、while循环语句1. while循环语法结构三、until循环1. until语法结构 循环语句 一、for循环语句 ㈠ 列表循环 列表for循环:用于将一组命令执行已知的次数 基本语法格式 for variable in {list} do command command … done 或者 for variable in a b c do

m0_50650953的博客 1941

shell 编程之流程控制语句详解

linux shell 编程之流程控制语句详解

congge_study的博客 6104

用AI+Playwright实现零代码UI自动化测试:以登录页面为例的实战指南

本文详细介绍了如何利用AI与Playwright结合实现零代码UI自动化测试,特别以登录页面为例进行实战演示。通过自然语言描述生成测试脚本,大幅降低技术门槛,提升测试效率,并支持跨浏览器验证。适合非技术人员快速上手专业级自动化测试。

weixin_28842269的博客 402

「Linux系列」Shell 流程控制if-else/for循环/While循环/until循环/case语句/跳出循环break、continue

如果你的脚本中有嵌套的循环,并且你想要从外层循环中跳出,你可能需要使用更复杂的逻辑或者考虑重新设计你的脚本结构。每次循环迭代时,都会检查条件,如果条件为真(返回值为 0),则执行循环体中的代码块;如果你的脚本中有嵌套的循环,并且你想要从外层循环中跳出,你可能需要使用更复杂的逻辑或者考虑重新设计你的脚本结构。如果用户输入的不是数字,脚本会打印错误消息,并将。在这个脚本中,用户被提示输入一个数字,循环会持续进行直到用户输入 5 为止。在这个脚本中,用户被提示输入一个数字,循环会持续进行直到用户输入 5 为止。

日常笔记/总结/系列知识梳理 2203

基于Quartus II软件的FPGA综合实验——多功能数字钟

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、设计要求二、设计原理三、设计过程1.数码管扫描模块2.计时模块3.闹钟模块4.闹钟响铃模块5.数码管显示模块6.整点报时功能7.模式选择模块(计时器主控电路)四、实验中遇到的困难及解决方案五、总结 前言 FPGA综合实验——多功能数字钟 基于Quartus II软件 一、设计要求 设计一个能进行时、分、秒计时的十二小时制或二十四小时制的数字钟,并具有定时与闹钟功能,能在设定的时间发出闹铃音,能非常方便地对小时、分钟和秒进.

qq_53022342的博客 2万+

Shell脚本学习_流程控制与函数

until循环与while循环等循环语句相反,while循环是条件语句为true则一直循环、until循环是条件语句判断为true则停止、判断为false则一直循环。而continue 语句也是结束循环的语句,不过continue 语句是指结束本次循环,而下次循环会继续。介绍:for循环是固定循环,也就是在循环时已经知道需要进行几次的循环,有时也把for循环称为计数循环。在while循环中,只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。break语句:跳出当前循环、循环结束。

zjh1418739290的博客 846

ads传统功放设计笔记(3)

传统功放设计的流程一般包括以下这些步骤: 1、明确设计目标 2、选择功放管子 3、确定静态工作点 4、设计偏置电路 5、判断稳定性 6、负载与源牵引 7、输入输出阻抗匹配 8、原理图优化 9、大信号仿真 10、版图设计 11、版图联合仿真 12、pcb设计 第二节我们设计仿真了功放的原理图。之后我们需要对版图进行设计和仿真。 10、版图设计 首先将S参数控件都打叉,还要去掉电源、源负载阻抗、地、芯片、电容。在原先电容和芯片的位置加上gap,设置好长度和间隔。之后在电源引脚、输入输出引脚和隔离的两端加上端口。

qq_40995480的博客 6026

FANUC机器人电弧跟踪功能深度解析:从电流采样原理到ROBOGUIDE仿真避坑指南

本文深度解析FANUC机器人电弧跟踪技术,从电流采样原理到ROBOGUIDE仿真避坑指南,详细介绍了电流波形分析、实时补偿机制及现场调试技巧。针对工业焊接中的常见问题,提供从底层原理到高阶应用的解决方案,帮助工程师优化自动化焊接质量。

weixin_31785177的博客 551

Linux系统学习04——shell编程的流程控制和shell函数

Linux系统学习04——shell编程的流程控制和shell函数,日记,1月28日,星期三,平平常常的一天。

qq_74437448的博客 851

LDO 上电过冲的根因

LDO在上电瞬间常出现短时过冲电压(3.4V-3.5V),可能损坏敏感器件。其根本原因是:低

硬核科技 293

008-Shell 流程控制

函数的定义可以使用以下语法:

小宝哥Code的专栏 1358

【软考】系统集成项目管理工程师(一)信息化知识

软考中级——系统集成项目管理工程师备考干货第一章:信息化知识。

商务合作 | 共同学习 | 携手共进 9万+

基于STM32L4XX、HAL库的STS40-CD1B-R3温度传感器 驱动程序设计

/ HAL库需要左移一位。// 每2秒读取一次。// 等待测量完成 - 高精度模式大约需要15ms。// 执行软复位确保传感器处于已知状态。温度测量范围:-40°C ~ +125°C。湿度测量范围:0% ~ 100% RH。// 复位后需要等待至少1ms。// 初始化STS40传感器。// 读取温湿度数据。// 转换原始数据为实际值。// 发送读取序列号命令。// 读取序列号数据。湿度精度:±1.5% RH。

zhusl6688的博客 287

什么是Shell流程控制?如何学习?

大家好呀!今天简单聊一聊Shell的流程控制。任何一门编程语言的学习,在了解了其基本的语法规则和变量外,都是从基础的流程控制语句开始学习。流程控制无非是顺序、分支(选择)加上循环,对于任何一门编程语言而言都是类似的。一、选择语句1、语法结构1)if语句只有条件为真才会执行command命令if [ condition ];then command command fi [ 条件 ] &a...

qq_56999608的博客 1191

uniapp开发小程序保存图片权限获取失败一直走fail?本地能保存,线上版就不行! 原来是这个问题!

通过这次经历,我发现线上版小程序和开发版、体验版的权限控制差异较大。如果你也遇到类似的问题,首先要检查是否已勾选“采集用户隐私”,并确保在提交审核时配置了隐私条款。这个设置非常关键,避免像我一样浪费了不少时间和版本。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1077

Shell脚本学习笔记

Shell学习笔记Shell学习笔记 简介 Shell教程入门 1shell脚本 2shell脚本实践 Shell变量 1使用变量 2只读变量 3删除变量 4变量类型 5shell字符串 6Shell数组 7Shell注释 Shell传递参数 1实例 Shell数组 Shell运算符 1算术运算符 2关系运算符 3布尔运算符 4逻辑运算符 5字符串运算符 6文件测试运算符 Shell echo命令

冰路梦 4593

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Shell 编程进阶:流程控制与函数

本文深入探讨了 Shell 编程的进阶主题,包括条件语句、循环结构和函数。通过详细的解释和实例,读者可以学习如何使用 if-else、for、while 等流程控制语句,以及如何定义和使用函数。文章还介绍了命令行参数处理、错误处理和调试技巧等高级特性,为读者提供了全面的 Shell 脚本编程指南。

Wikino的博客 1226

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Shell流程控制和传参

Shell流程控制和传参

Charge8的博客 1400

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Shell之函数及流程控制语序

Shell之流程控制语序

weixin_44828950的博客 203

Linux-基础了解-04-printf 命令/test 命令/流程控制/Shell 函数/输入/输出重定向/文件包含

printf 命令/test 命令/流程控制/Shell 函数/输入/输出重定向/文件包含

Xiaowu2048的博客 1304

shell流程控制

取值将检测匹配的每一个模式。在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。condition 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。值后为关键字 in,接下来是匹配的各种模式,每一模式最后必须以右括号结束,模式支持正则表达式。运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句。

运维老生常谈 1123

Shell脚本学习

(1)定义变量:变量=值(2)撤销变量: unset 变量(3)声明静态变量:readonly变量,注意不能 unset2、变量定义规则(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写(2)等号两侧不能有空格!(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。(4)变量的值如果有空格,需要使用双引号或单引号括起来。

小石潭记丶 1270
上一篇: Shell学习(4/6) printf 命令-test 命令
下一篇: Shell学习(6/6) 输入/输出重定向-文件包含
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值