当前位置: 首页 > 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.xdnf.cn/news/1425475.html

相关文章:

  • http缓存
  • LobeChat知识库,小团队的选择,理解Embedding与向量数据库的关系
  • 解决Content Security Policy (CSP)问题
  • Java类加载机制
  • 软件使用教程(四):Jupyter Notebook 终极使用指南
  • 【iOS】关键字复习
  • javaScript变量命名规则
  • MySQL基础知识保姆级教程(四)视图与约束
  • Chrome 如何清除浏览器缓存
  • 【开题答辩全过程】以 基于SpringBoot的校园一卡通管理系统的设计与实现为例,包含答辩的问题和答案
  • ESP32驱动数字麦克风INMP441
  • A2A + MCP 的python实现的最小可运行骨架
  • Jmeter实现参数化的4种方式
  • 构建AI智能体:二十、妙笔生花:Gradio集成DashScope Qwen-Image模型实现文生图
  • 人脸识别备案的重要意义
  • ES6新特性:JavaScript的进化装备箱[特殊字符]
  • 记一次使用函数式接口
  • A股大盘数据-20250901 分析
  • GD32入门到实战25--独立看门狗
  • JAVA后端开发——MyBatis 结合 MySQL JSON 类型查询详解
  • 【STM32】贪吃蛇 [阶段 3] 增强模块结构(架构优化)
  • curl 介绍及使用教程
  • python爬虫之selenium库进阶(小白五分钟从入门到精通)
  • 基本渗透概念
  • Raft 协议在 Nacos 中的实现
  • 从零开始实现Shell | Linux进程调度实战
  • Product Hunt 每日热榜 | 2025-09-01
  • 基于YOLOv11的脑卒中目标检测及其完整数据集——推动智能医疗发展的新机遇!
  • 齿轮里的 “双胞胎”:分度圆与节圆
  • [React]监听Form中某个字段的变化