当前位置: 首页 > news >正文

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.dtcms.com/a/361072.html

相关文章:

  • (9.1)Python测试之记录
  • 面试 TOP101 动态规划专题题解汇总Java版(BM62 —— BM82)
  • 【数学建模学习笔记】数据标准化
  • NUC029芯片解密和产品应用介绍
  • 玻璃门轻松更换智能密码锁,对接会议预约小程序的方法
  • 美术馆预约小程序|基于微信小程序的美术馆预约平台设计与实现(源码+数据库+文档)
  • Jenkins大总结 20250901
  • 今日分享:C++ -- vector
  • Linux 进程状态 — 僵尸进程
  • keil MDK如何使用第三方软件Keil2Json.exe生成compile_commands.json文件,方便vscode+clangd环境使用
  • Java面试-微服务(业务问题)
  • C#在物联网GPS经纬度转换为百度地图地址
  • 再见 K8s!3款开源的云原生部署工具
  • NetCoreKevin-DDD-微服务-WebApi-AI智能体、AISK集成、MCP协议服务、SignalR、Quartz 框架-15-认证与安全
  • DevExpress WinForms中文教程:Data Grid - 过滤编辑器
  • Spring事务管理策略对比与性能优化实践指南
  • k8s--etcd
  • CTFshow系列——命令执行web73-77(完结篇)
  • LeetCode Hot 100 Python (41~50)
  • .NET 微服务日志系统:Serilog + Loki + Grafana 实践指南
  • 安卓11 12系统修改定制化_____常用的几种修改固件 实现指定 “运行内存” 显示
  • 【论文精读】基于YOLOv3算法的高速公路火灾检测
  • ios 配置了代理且使用 chls.pro/ssl 下载不了证书,无法弹出下载证书的提示问题
  • 高防IP防护效果评估全攻略:从指标解读到实战测试
  • python填充多边形,获取所有内部点
  • JVM:内存区域划分、类加载的过程、垃圾回收机制
  • 电影票api接口对接步骤
  • Minecraft(我的世界)服务器信息查询免费API接口详解
  • Java PDF转多种图片格式:技术实践与性能优化
  • Flutter 本地持久化存储:Hive 与 SharedPreferences 实战对比