shell脚本函数介绍

1. 函数 (Functions)

定义与优势

  • 函数是可重复使用的功能模块

  • 优势:代码复用,直接调用解决问题

分类

  • 内置函数:编程语言自带的函数(如 print

  • 自定义函数:程序员自己编写的函数

定义语法

# 方式一
function 函数名() {程序段[return int;]
}# 方式二
函数名() {程序段[return int;]
}

调用方式

  • 直接使用函数名调用:函数名

  • 必须先定义后调用

参数传递

  • 通过 $n 获取参数($1 第一个参数,$2 第二个参数,等等)

  • 当 n≥10 时,需使用 ${n} 格式

返回值

  • 使用 return 返回数据(只能返回 0-255 的整数)

  • 返回值存储在 $? 中

  • 如果不加 return,将以最后一条命令运行结果作为返回值

2. 数组 (Arrays)

定义方式

# 方式一
数组名=(值1 值2 值3 ... 值N)# 方式二(索引定义)
数组名[索引]=值

读取数组

${数组名[索引]}    # 读取单个元素
${数组名[*]}       # 读取所有元素
${数组名[@]}       # 读取所有元素
${#数组名[*]}      # 获取数组长度
${#数组名[@]}      # 获取数组长度

遍历数组

# 方式一
for 变量 in ${数组名[*]}
doecho $变量
done# 方式二
for((i=0; i<数组长度; i++))
doecho ${数组名[$i]}
done

3. 加载其他文件变量

语法

. 文件名    # 注意点号和文件名间的空格
source 文件名

案例:查看root用户的CPU、内存使用情况及显示主机名和查看时间

优势

  • 数据源和业务处理分离

  • 代码复用和扩展性更强

4. 综合案例:猜数字游戏

游戏规则

  • 程序内置 1-100 之间的随机数

  • 用户猜测数字,系统提示"大了"、"小了"或"猜对了"

  • 直到用户猜对,游戏结束

核心实现

#!/bin/bash
num=$[RANDOM%100+1]  # 生成1-100的随机数while true
doread -p "请输入猜测的数字: " caiif [ $cai -eq $num ]; thenecho "恭喜,猜对了"exitelif [ $cai -gt $num ]; thenecho "猜大了"elseecho "猜小了"fi
done

关键要点总结

  1. 函数必须定义在调用之前

  2. 函数参数通过 $1, $2... 获取

  3. 函数返回值通过 return 和 $? 处理

  4. 数组元素用空格分隔,索引从0开始

  5. 使用 source 或 . 加载外部文件变量

  6. RANDOM 变量生成随机数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/920833.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DAY 20 奇异值SVD分解-2025.9.1

奇异值SVD分解 知识点回顾&#xff1a; 线性代数概念回顾奇异值推导奇异值的应用 a. 特征降维&#xff1a;对高维数据减小计算量、可视化 b. 数据重构&#xff1a;比如重构信号、重构图像&#xff08;可以实现有损压缩&#xff0c;k 越小压缩率越高&#xff0c;但图像质量损失…

《C++——定长内存池》

一、为什么需要内存池&#xff1f; 常规的new/delete操作存在两个主要问题&#xff1a; 性能开销大&#xff1a;每次new都需要向操作系统申请内存&#xff0c;delete需要归还给系统&#xff0c;这涉及内核态与用户态的切换&#xff0c;在高频次调用时性能损耗明显。 内存碎片&a…

【跨境电商】上中下游解释,以宠物行业为例

上中下游概念及其在宠物行业的应用 在产业链分析中&#xff0c;“上中下游”指的是一个产品或服务的不同环节&#xff1a;上游涉及原材料供应和基础资源&#xff0c;中游负责生产加工和制造&#xff0c;下游则包括销售、分销和服务。这种划分有助于理解整个价值链的运作。下面&…

飞牛NAS上部署Markdown文稿编辑器,阅读.md文件同时还可以跨平台访问!

前言前段时间小白在使用.md文件的阅读器&#xff0c;好像是什么*ypor*&#xff0c;但是这个软件它收费。&#xff08;也不是找不到PJ版本&#xff0c;只是感觉这是人家的知识产权&#xff0c;就不整了。&#xff09;于是小白在寻找能够代替这个软件的其他软件&#xff0c;而且如…

浅谈 SQL 窗口函数:ROW_NUMBER() 与聚合函数的妙用

在日常开发中&#xff0c;我们经常会遇到这样的需求&#xff1a;既要保留明细数据&#xff0c;又要对数据进行排名、累计、分区统计。如果仅依赖传统的 GROUP BY&#xff0c;往往需要做多次子查询或者复杂的 JOIN&#xff0c;既繁琐又低效。 而 窗口函数&#xff08;Window Fun…

DSPFilters实现低通滤波器(QT)

DSPFilters实现低通滤波器DSPFilters实现低通滤波器DSPFilters安装-构建静态库QT代码复制include和静态库到qt项目qt代码配置效果DSPFilters实现低通滤波器 https://github.com/vinniefalco/DSPFilters DSPFilters安装-构建静态库 用 Qt 自带的 MinGW&#xff08;最简单&…

mybatis plus 基本使用和源码解析

简介 mybatis-plus是一款mybatis增强工具&#xff0c;用于简化开发&#xff0c;提高效率。mybatis-plus免去了用户编写sql的麻烦&#xff0c;只需要创建好实体类&#xff0c;并创建一个继承自BaseMapper的接口&#xff0c;mybatis就可以自动生成关于单表的crud。mybatis-plus自…

【Android】Notification 的基本使用

文章目录【Android】Notification的基本使用权限通知的基本使用1. 获取通知管理器&#xff08;用于发送、更新、取消通知&#xff09;2. 创建通知渠道&#xff08;Android 8.0 必须&#xff09;3. 使用通知3.1 发送通知3.2 更新通知3.3 取消通知通知的进阶技巧通知显示样式1. B…

Web前端开发基础

1.前端概论 1.1 什么是前端&#xff1f; 概念&#xff1a;前端(Front-End)&#xff0c;也称为客户端(Client-Side)&#xff0c;指的是用户在使用网站或Web应用时直接看到并与之交互的部分。它涵盖了屏幕上的一切内容&#xff0c;从文字、图片、按钮、布局到动画效果 一个简单的…

并发编程——11 并发容器(Map、List、Set)实战及其原理分析

1 JUC包下的并发容器Java 基础集合&#xff08;如 ArrayList、LinkedList、HashMap&#xff09;非线程安全。为了解决线程安全问题&#xff0c;Java 最初提供了同步容器&#xff08;如 Vector、Hashtable、SynchronizedList&#xff09;&#xff0c;但它们通过 synchronized 实…

Circuitjs 测试点的使用

在电路中, 有时候我们想知道, 各个节点上电压的具体的值. 比如下面这个电路:电流流经两个电阻器之后, 电压在下降. 如果想知道具体节点电压的确切数值, 可以通过添加 测试点(Test Point) 实现. 点击 绘制–输出和标签–添加测试点, 之后在所需测量的节点上拖动添加一个测试点, …

Ansible Playbook 实践

Ansible Playbook 实践一、Playbook 基础规范&#xff08;一&#xff09;YAML 格式要求文件标识&#xff1a;以 --- 开头&#xff0c;明确为 YAML 文件&#xff0c;结尾可加 ...&#xff08;可选&#xff0c;用于标记文件结束&#xff09;。注释规则&#xff1a;用 # 实现注释&…

基于 Vue + Interact.js 实现可拖拽缩放柜子设计器

实现可视化设计工具已成为前端开发的重要挑战之一。本文将介绍如何使用 Vue.js 配合 Interact.js 库创建一个功能完整的橱柜设计器&#xff0c;兼容PC和移动终端。核心功能网格系统&#xff1a;基于 CSS 网格实现精准定位拖拽功能&#xff1a;实现单元格的自由移动缩放控制&…

今日科技速递 | 智能芯片突围、AI+行动深化、服贸会科技成果亮相

今日科技速递 | 智能芯片突围、AI行动深化、服贸会科技成果亮相 一、乐鑫科技涨停&#xff1a;Wi-Fi 6/7 与 AIoT 芯片双路径创新驱动 新闻回顾 2025 年 8 月 27 日&#xff0c;科创板公司 乐鑫科技&#xff08;688018&#xff09; 盘中一度涨停&#xff0c;股价达到 225 元&am…

PDF压缩如何平衡质量与体积?

在日常工作或者生活中&#xff0c;我们常常要处理PDF文档&#xff0c;很多人可能会遇到这样的困扰&#xff1f;使用WPS处理PDF时&#xff0c;部分功能需要付费&#xff0c;这给我们带来了许多不便。 它的使用方式十分简单&#xff0c;你只要双击图标&#xff0c;它就能启动&am…

Flask 之上下文详解:从原理到实战

一、引言&#xff1a;为什么 Flask 需要“上下文”&#xff1f;在 Web 开发中&#xff0c;我们经常需要访问当前请求的信息&#xff08;如 URL、表单数据&#xff09;、当前应用实例&#xff08;如配置、数据库连接&#xff09;或用户会话状态。传统做法是使用全局变量&#xf…

深入探索Vue:前端开发的强大框架

在当今的前端开发领域&#xff0c;Vue作为一款备受瞩目的JavaScript框架&#xff0c;以其简洁易用、高效灵活等特性&#xff0c;赢得了众多开发者的青睐。无论是构建小型的交互页面&#xff0c;还是开发大型的单页应用&#xff0c;Vue都能展现出卓越的性能和出色的表现。本文将…

B树与B+树的原理区别应用

在磁盘存储和内存有序的数据管理中&#xff0c;B 树与 B 树是核心的数据结构&#xff0c;二者均通过 “多路平衡” 特性减少 IO 次数&#xff0c;但在数据存储方式、查询逻辑上存在本质差异。一、B 树&#xff08;Balance Tree&#xff09;&#xff1a;多路平衡搜索树B 树是 “…

从零到一:使用anisble自动化搭建kubernetes集群

在我们云原生俱乐部的暑期学习中&#xff0c;我们了解并学习了需要关于云原生的技术&#xff0c;其中在应用层面上最重要的就是shell编程和ansible&#xff0c;而想要掌握这两项技术离不开的就是实践&#xff0c;而kubernetes是我们云原生技术栈的核心技术&#xff0c;在生产实…

【LangGraph】langgraph.prebuilt.create_react_agent() 函数:快速创建基于 ReAct(Reasoning + Acting)架构的智能代理

本文是对 langgraph.prebuilt.create_react_agent 函数的详细且全面的介绍&#xff0c;涵盖其定义、功能、设计理念、参数、返回值、使用场景、实现原理、示例代码、高级用法、注意事项、与其他方法的对比&#xff0c;以及学习建议。 1. 概述 langgraph.prebuilt.create_react…