【linux】shell(33)-函数

ops/2024/12/13 1:51:27/

编写和使用函数是 shell 脚本编程中的一个重要方面。函数可以帮助你组织代码,提高代码的可读性和可重用性。

1. 定义函数

在 shell 脚本中,定义函数的基本语法有两种:

# 语法 1
function function_name {# 函数体
}# 语法 2
function_name() {# 函数体
}

两种语法效果相同,你可以根据个人习惯选择。

2. 调用函数

定义函数后,你可以通过函数名直接调用它:

function_name

3. 函数参数

函数可以接收参数,这些参数在函数内部通过特殊变量 $1, $2, …, $N 来访问,其中 $1 是第一个参数,$2 是第二个参数,依此类推。$0 是脚本的名字,而不是函数的名字。

my_function() {echo "第一个参数是:$1"echo "第二个参数是:$2"
}my_function "Hello" "World"

4. 返回值

函数可以通过 return 语句返回状态码(0 表示成功,非 0 表示失败)。此外,函数可以通过 echo 输出返回复杂的结果。

# 返回状态码
my_function() {if [ "$1" -gt 10 ]; thenreturn 0elsereturn 1fi
}my_function 15
echo "函数返回状态码:$?"# 返回复杂结果
get_greeting() {echo "Hello, $1!"
}greeting=$(get_greeting "World")
echo $greeting

5. 局部变量

在函数中定义局部变量可以避免变量名冲突,使用 local 关键字来定义局部变量:

my_function() {local local_var="This is a local variable"echo $local_var
}my_function

6. 示例脚本

下面是一个包含函数的完整示例脚本:

#!/bin/bash# 定义函数
greet_user() {local username=$1echo "你好, $username!"
}# 定义计算函数
add_numbers() {local num1=$1local num2=$2echo "总和是:$((num1 + num2))"
}# 调用函数
greet_user "小明"
add_numbers 5 7

7. 脚本执行

确保你的脚本文件具有可执行权限,然后通过以下命令执行:

chmod +x your_script.sh
./your_script.sh

8. 注意事项

  • 命名规范:函数名通常使用小写字母和下划线,避免与系统命令冲突。
  • 位置参数:在函数内部,位置参数 $1, $2 等指的是函数参数,而不是脚本参数。
  • 作用域:默认情况下,shell 脚本中的变量是全局的。使用 local 可以将变量限制在函数内部。

http://www.ppmy.cn/ops/141398.html

相关文章

3356. 零数组变换 Ⅱ

3356、[中等] 零数组变换 Ⅱ 1、题目描述 给你一个长度为 n 的整数数组 nums 和一个二维数组 queries,其中 queries[i] [li, ri, vali]。 每个 queries[i] 表示在 nums 上执行以下操作: 将 nums 中 [li, ri] 范围内的每个下标对应元素的值 最多 减少…

CSS输入框动态伸缩动效

前言 下面我们将会做出如下图输入框样式&#xff0c;并且附上组件代码&#xff0c;有特殊需求的可以自行优化同理&#xff0c;下拉框的话只要把el-input标签修改掉即可 MyInput组件 <template><div class"my-input" click.stop"showInput !showInput…

搭建人工智能多模态大语言模型的通用方法

上一篇&#xff1a;《理解多模态大语言模型&#xff0c;主流技术与最新模型简介》 序言&#xff1a;动手搭建建多模态LLM的两大通用主流方法是&#xff1a;统一嵌入-解码器架构和跨模态注意力架构&#xff0c;它们都是通过利用图像嵌入与投影、跨注意力机制等技术来实现的。 …

深度学习视频编解码开源项目介绍【持续更新】

DVC (Deep Video Compression) 介绍:DVC (Deep Video Compression) 是一个基于深度学习的视频压缩框架,它的目标是通过深度神经网络来提高视频编码的效率,并降低比特率,同时尽可能保持视频质量。DVC 是一个端到端的神经网络模型,它在压缩视频时利用了视频帧之间的时间冗余…

63 基于单片机的四个速度比较

所有仿真详情导航&#xff1a; PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于51单片机&#xff0c;采用四个滑动变阻器连接数模转换器模拟四个速度值&#xff0c;通过LCD1602显示&#xff0c;然后检测出最高的…

SpringBoot3

1. 配置文件 1. 基本使用 使用 配置文件classpath:application.properties spring.jdbc.drivercom.mysql.cj.jdbc.Driver spring.jdbc.urljdbc:mysql://localhost:3306/batis spring.jdbc.usernameroot spring.jdbc.password123456使用配置文件的值&#xff1a;Value("…

鸿蒙分享(五):axios网络请求+简单封装

代码仓库&#xff1a;share_harmonyos: 鸿蒙分享 鸿蒙api:12 axios开源库地址&#xff1a;OpenHarmony三方库中心仓 1.axios使用 1.安装 ohpm install ohos/axios 2.添加网络权限 common--src--module.json5 添加如下: "requestPermissions": [{"name&quo…

ZED相机应用

下载SDK wget https://stereolabs.sfo2.cdn.digitaloceanspaces.com/zedsdk/3.6/ZED_SDK_Ubuntu18_cuda11.5_v3.6.5.run 安装 ./ZED_SDK_Ubuntu18_cuda11.5_v3.6.5.run skip_python 测试 cd /usr/local/zed/tools ls ZED_Calibration ZED_Depth_Viewer ZED_Diagnostic ZED_E…