【linux/shell】如何创建脚本函数库并在其他脚本中调用
目录
1. 创建脚本库文件
2. 修改脚本库权限,使脚本库可执行
3. 在其他脚本中调用脚本库
4. 使用环境变量或.bashrc
5. 使用Shellcheck
6. 编写注释及说明文档
在Shell中创建和使用脚本库通常涉及以下几个步骤:
1. 创建脚本库文件
脚本库通常是包含了一系列可重用函数的Shell脚本文件。你可以使用文本编辑器创建一个脚本库文件,例如 mylib.sh 。
nano mylib.sh
其中nano是:
nano是 Linux 和类 Unix 系统中的一个文本编辑器,它以简单易用而著称,特别适合初学者或那些需要快速编辑文件的用户。以下是一些基本的nano命令和操作:
- 打开文件:在终端中输入
nano filename(将filename替换为要编辑的文件名)。- 保存更改:按下
Ctrl + O,然后按回车键确认文件名,保存更改。- 退出编辑器:按下
Ctrl + X退出编辑器。如果有未保存的更改,nano 会询问你是否要保存。- 撤销操作:按下
Ctrl + _(即 Ctrl 键和减号键)。- 剪切/复制/粘贴:使用
Ctrl + K剪切当前行,使用Ctrl + U恢复剪切的内容,使用Ctrl + 6粘贴剪切板的内容。- 搜索文本:按下
Ctrl + W,输入要搜索的文本,然后按回车键。
nano还提供了一个帮助菜单,可以通过按Ctrl + G访问,其中包含了所有的快捷键和命令的列表。
在文件中,你可以定义一些函数,例如:
#!/bin/bashfunction greet {echo "Hello, $1!"
}function goodbye {echo "Goodbye, $1!"
}
2. 修改脚本库权限,使脚本库可执行
使用 chmod 命令使脚本库文件具有可执行权限。
chmod +x mylib.sh
3. 在其他脚本中调用脚本库
在你的主脚本中,你可以使用 source 命令来包含脚本库。就想c语言中include头文件一样,让你能访问库中定义的函数。
#!/bin/bash# 包含脚本库
source ./mylib.sh# 使用库中的函数
greet "World"
goodbye "World"
对于source命令来说,还有一个快捷方法,就是使用它的别名,称为点操作符(dot operator),
#包含脚本库. ./mylib.sh
4. 使用环境变量或.bashrc
为了在任何脚本中使用你的脚本库,你可以将其路径添加到环境变量 PATH 中。
export PATH=$PATH:/path/to/your/library
然后,你可以在任何脚本中通过 source 命令包含它,而无需指定完整路径。
也可以使用.bashrc文件,讲你的函数库调用写到.bashrc文件中,下次启动shell时,就可以在命令行中使用库中的函数了,而且shell还会将定义好的函数传给子shell进程,这样这些函数就可以用于任何shell会话中了
5. 使用Shellcheck
为了确保你的脚本库没有错误,可以使用 Shellcheck 工具进行语法和逻辑检查。
shellcheck mylib.sh
6. 编写注释及说明文档
编写文档来描述你的脚本库中每个函数的用途、参数和返回值,这将帮助其他开发者更好地理解和使用你的脚本库。
通过这些步骤,你可以创建一个Shell脚本库,并在其他脚本中重用这些功能。记住,脚本库应该放置在所有脚本都能访问到的位置,或者通过环境变量 PATH 来指定其路径。
相关文章:
【linux/shell】如何创建脚本函数库并在其他脚本中调用
目录 1. 创建脚本库文件 2. 修改脚本库权限,使脚本库可执行 3. 在其他脚本中调用脚本库 4. 使用环境变量或.bashrc 5. 使用Shellcheck 6. 编写注释及说明文档 在Shell中创建和使用脚本库通常涉及以下几个步骤: 1. 创建脚本库文件 脚本库通常是包…...
Instruct-GS2GS:通过用户指令编辑 GS 三维场景
Paper: Instruct-GS2GS: Editing 3D Gaussian Splats with Instructions Introduction: https://instruct-gs2gs.github.io/ Code: https://github.com/cvachha/instruct-gs2gs Instruct-GS2GS 复用了 Instruct-NeRF2NeRF 1 的架构,将基于 NeRF 的三维场景编辑方法迁…...
disql使用
SQL 交互式查询工具 | 达梦技术文档 进入bin目录:cd /opt/dmdbms/bin 启动disql:./disql,然后输入用户名、密码 sh文件直接使用disql: 临时添加路径到PATH环境变量:在当前会话中临时使用disql命令而无需每次都写完整…...
SpringBoot Mybatis-Plus 日志带参数
SpringBoot Mybatis-Plus 日志带参数 1 实现代码2 测试结果 在Spring Boot中,MyBatis插件机制通过拦截器(Interceptor)来实现。拦截器允许开发人员在执行SQL语句的各个阶段(如SQL语句创建、参数处理、结果映射等)插入自…...
【WebGIS平台】传统聚落建筑科普数字化建模平台
基于上述概括出建筑单体的特征部件,本文利用互联网、三维建模和地理信息等技术设计了基于浏览器/服务器(B/S)的传统聚落建筑科普数字化平台。该平台不仅实现了对传统聚落建筑风貌从基础到复杂的数字化再现,允许用户轻松在线构建从…...
Zookeeper分布式锁原理说明【简单易理解】
Zookeeper 非公平锁/公平锁/共享锁 。 1.zookeeper分布式锁加锁原理 如上实现方式在并发问题比较严重的情况下,性能会下降的比较厉害,主要原因是,所有的连接都在对同一个节点进行监听,当服务器检测到删除事件时,要通知…...
去除Win32 Tab Control控件每个选项卡上的深色对话框背景
一般情况下,我们是用不带边框的对话框来充当Tab Control的每个选项卡的内容的。 例如,主对话框IDD_TABBOX上有一个Tab Control,上面有两个选项卡,第一个选项卡用的是IDD_DIALOG1充当内容,第二个用的则是IDD_DIALOG2。I…...
iis部署前后端分离项目(React前端,Node.js后端)
iis虽然已经有点过时,但不少用户还在用,故总结一下。 1. 安装iis 如果电脑没有自带iis管理器,打开控制面板->程序->启用或关闭Windows功能,勾选iis安装即可 2. 部署前端项目 打开iis,添加网站,物理…...
【前端项目笔记】9 数据报表
数据报表 效果展示: 在开发代码之前新建分支 git checkout -b report 新建分支report git branch 查看分支 git push -u origin report 将本地report分支推送到云端origin并命名为report 通过路由的形式将数据报表加载到页面中 渲染数据报表基本布局 面包屑导航…...
等保测评推动哈尔滨数字化转型中的安全保障
在数字经济的浪潮下,哈尔滨作为东北老工业基地的核心城市,正积极推动数字化转型,以创新技术驱动产业升级和经济发展。网络安全等级保护测评(简称“等保测评”)作为国家网络安全战略的重要组成部分,为哈尔滨…...
#pragma 指令
#pragma 指令作用是设定编译器的状态或者是指示编译器完成一些特定的动作 message 参数能够在编译信息输出窗口中输出相应的信息 #pragma message(“消息文本”) code_seg参数能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它 #pragma…...
【Excel】 批量跳转图片
目录标题 1. CtrlA全选图片 → 右键 → 大小和属性2. 取消 锁定纵横比 → 跳转高度宽度 → 关闭窗口3. 最后一图拉到最后一单元格 → Alt吸附边框4. CtrlA全选图片 → 对齐 → 左对齐 → 纵向分布!…...
网站更新改版了
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Leo杂谈 ✨特色专栏:MySQL学…...
初识大模型
前提:学习一项技术,要从原理、实践、认知三个方面进行攻克。 不懂原理就不会举一反三,走不了太远。 不懂实践就只能纸上谈兵,做事不落地。 认知不高就无法作对决策,天花板太低。 一、知识体系 二、什么是AI 基于机器…...
Open3D SVD算法实现对应点集配准
目录 一、概述 1.1基本思想 1.2实现步骤 二、代码实现 三、实现效果 3.1原始点云 3.2配准后点云 3.3变换矩阵 一、概述 在点云配准中,SVD(Singular Value Decomposition,奇异值分解)方法是一种常用的精确计算旋转和平移变换的算法。其目标是找到一个刚体变…...
bWAPP靶场安装
bWAPP安装 下载 git地址:https://github.com/raesene/bWAPP 百度网盘地址:链接:https://pan.baidu.com/s/1Y-LvHxyW7SozGFtHoc9PKA 提取码:4tt8 –来自百度网盘超级会员V5的分享 phpstudy中打开根目录,并将下载的文…...
SpringBoot + MyBatisPlus 实现多租户分库
一、引言 在如今的软件开发中,多租户(Multi-Tenancy)应用已经变得越来越常见。多租户是一种软件架构技术,它允许一个应用程序实例为多个租户提供服务。每个租户都有自己的数据和配置,但应用程序实例是共享的。而在我们的Spring Boot MyBati…...
【数据挖掘】银行信用卡风险大数据分析与挖掘
银行信用卡风险大数据分析与挖掘 1、实验目的 中国某个商业银行高层发现自家信用卡存在严重的欺诈和拖欠现象,已经影响到自身经营和发展。银行高层希望大数据分析部门采用数据挖掘技术,对影响用户信用等级的主要因素进行分析,结合信用卡用户的人口特征属性对欺诈行为和拖欠…...
使用 Qt 和 ECharts 进行数据可视化
文章目录 示例图表预览折线图散点图柱状图使用 Qt 和 ECharts 进行数据可视化一、准备工作1. 安装 Qt2. 准备 ECharts二、在 Qt 中使用 ECharts1. 创建 Qt 项目2. 配置项目文件3. 在 UI 中添加 WebEngineView4. 加载 ECharts三、创建折线图、散点图和柱状图1. 折线图2. 散点图3…...
【机器学习】在【Pycharm】中的实践教程:使用【逻辑回归模型】进行【乳腺癌检测】
目录 案例背景 具体问题 1. 环境准备 小李的理解 知识点 2. 数据准备 2.1 导入必要的库和数据集 小李的理解 知识点 2.2 数据集基本信息 小李的理解 知识点 注意事项 3. 数据预处理 3.1 划分训练集和测试集 小李的理解 知识点 注意事项 3.2 数据标准化 小李…...
基于Godot引擎的模块化RTS游戏框架开发实战指南
1. 项目概述:当开放世界RTS遇上Godot引擎如果你和我一样,是个对即时战略游戏(RTS)有情怀,同时又对Godot引擎的轻量与高效念念不忘的开发者,那么看到“lampe-games/godot-open-rts”这个项目标题时ÿ…...
山姆小程序云网关数据hook主动调用分析
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包 内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!侵权通过头像私信或名字简介叫我删除博…...
书匠策AI写毕业论文到底靠不靠谱?我把它的功能拆成“论文通关游戏“讲给你听
各位同学好,我是专门教人写论文的教育博主。 最近后台私信里出现频率最高的一句话是:"老师,书匠策AI到底怎么用?"今天我换个讲法——不列功能清单,而是把写毕业论文想象成一款五关游戏,每一关告…...
告别恼人的JDK版本警告!手把手教你为IDEA+Maven项目永久锁定Java 8(保姆级避坑图解)
彻底根治IDEAMaven项目的JDK版本警告:从项目配置到环境锁定的终极方案 每次打开IntelliJ IDEA,那个刺眼的黄色警告"Warning:java: 源值1.5已过时"就像代码世界里的蟑螂,虽然无害但令人极度不适。作为有代码洁癖的开发者,…...
2026届毕业生推荐的十大AI学术助手推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能技术已经深度地融入到了学术写作的流程当中,在毕业论文的撰写期间&#…...
VINS-Fusion实战避坑指南:TUM数据集参数调优与min_dist参数深度解析
VINS-Fusion实战避坑指南:TUM数据集参数调优与min_dist参数深度解析 在视觉惯性里程计(VIO)领域,VINS-Fusion凭借其出色的多传感器融合能力和开源特性,已成为众多研究者和开发者的首选框架。然而,当我们将目…...
如何用WPS-Zotero插件在Linux下高效写论文:跨平台学术写作终极指南
如何用WPS-Zotero插件在Linux下高效写论文:跨平台学术写作终极指南 【免费下载链接】WPS-Zotero An add-on for WPS Writer to integrate with Zotero. 项目地址: https://gitcode.com/gh_mirrors/wp/WPS-Zotero 还在为Linux下缺乏专业的文献管理工具而烦恼吗…...
STM32F407 模拟IIC驱动AT24C02:从时序解析到稳定读写
1. 模拟IIC通信的本质与价值 在嵌入式开发中,IIC总线因其简洁的两线制结构(SCL时钟线和SDA数据线)被广泛应用。但实际项目中常遇到两种尴尬:硬件IIC外设被其他功能占用,或者需要灵活调整引脚配置。这时用GPIO口模拟IIC…...
为什么你的AI测试总在“伪自动化”?SITS 2026的3层认知跃迁:从用例驱动→意图驱动→反馈演化
AI原生测试方法革新:SITS 2026自动化测试新思路 更多请点击: https://intelliparadigm.com 第一章:为什么你的AI测试总在“伪自动化”? “伪自动化”是当前AI工程实践中最隐蔽的效率陷阱——表面看测试脚本在运行,日…...
从机器人到游戏引擎:用Eigen库搞定C++中的3D数学(附完整代码示例)
从机器人到游戏引擎:用Eigen库搞定C中的3D数学(附完整代码示例) 在计算机图形学、机器人学和游戏开发中,3D数学是不可或缺的基础。无论是计算机器人末端执行器的位姿,还是实现3D相机的变换,亦或是进行刚体运…...
