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

VMware Converter 6.2.0保姆级教程:从物理机到ESXi主机的完整迁移指南(含常见错误排查)

本文提供VMware Converter 6.2.0从物理机迁移至ESXi主机的完整保姆级教程。详细解析了迁移前的环境规划、核心转换过程步骤、版本差异对比,并重点针对代理安装失败、任务卡顿、虚拟机无法启动等常见错误提供了实战排查与解决方案,确保P2V迁移顺利进行。

sam99的博客 380

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

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

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

BOE CHPI协议解析:高速显示驱动的核心技术

本文深入解析了BOE CHPI协议,这是一种为高分辨率、高刷新率显示面板设计的时钟嵌入式高速点对点接口技术。文章详细阐述了其三层架构(物理层、链路层、协议层)、核心机制(如链路训练与BCC通道)以及如何通过高速串行差分传输解决大尺寸屏幕内部数据传输的带宽与干扰难题,是驱动8K、窄边框等高端显示应用的关键核心技术。

m9n0o的博客 544

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

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

zjh1418739290的博客 846

AlphaFold-multimer实战:从零开始预测STAT1-STAT2蛋白复合物结构

本文详细介绍了使用AlphaFold-multimer从零开始预测STAT1-STAT2蛋白复合物结构的完整实战流程。内容涵盖环境配置、数据库准备、序列处理、参数优化及结果可信度评估,为研究者利用这一AI工具进行复合物结构预测提供了系统指南和深度解析。

weixin_29094301的博客 886

【RS】哨兵系列数据下载(哨兵2号Sentinel-2波段介绍、下载)

以哨兵二号为示例,分享如何下载欧空局的哨兵系列数据

Remote Sensing迷途小书童 1万+

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

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

qq_74437448的博客 851

【AutoCAD中实现双击文本编辑功能】

例如:以下是官方博客例子浅析先加入相关的头文件和库文件。在AutoCAD中有一个很重要的功能,就是双击图形尺寸或文本后会出现一个文本编辑框,用户可在该编辑框中修改文字。本文介绍了如何使用AcEdInplaceTextEditor来实现该功能。实现cad的消息监听。创建一个消息监听的类并在cad中注册来实现消息监听。主要是监听键盘输入。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了的函数和方法。

我的博客 1149

008-Shell 流程控制

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

小宝哥Code的专栏 1358

uniApp微信小程序:error: 60001 request:fail errcode:-101 cronet error code:-101error_msg:net::ERR CONNECTI

uni-app微信小程序域名访问报error 60001 request:fail errcode:-101,解决Uniapp微信小程序报600001错误,uni.request()接口请求报错,服务器更换SSL证书后,uniapp微信小程序出现`request:fail errcode:-101`问题分析与解决,服务器更换ssl证书后,手机访问微信小程序异常,微信小程序更换SSL证书后出现请求报错,服务器更换SSL证书,微信小程序报600001,小程序反应偶尔出现request:fail errcode:

✅ 精选推荐文章 4583

Cesium功能集(十二):Cesium中流体仿真

【代码】Cesium功能集(十二):Cesium中流体仿真。

GIS肆月 601

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

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

qq_56999608的博客 1191

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

Wikino的博客 1226

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Shell流程控制和传参

Shell流程控制和传参

Charge8的博客 1400

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、付费专栏及课程。

余额充值