shell脚本之函数
快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)
函数
一,什么是函数
函数是一段功能代码,用来解决shell编程中冗余代码[重复且不连续出现的功能性代码]的问题
1、把相同的程序段定义为函数,可以减少整个程序段代码量,提升开发效率。
2、增加程序段可读性、易读性,提升管理效率。
3、可以实现程序功能模块化,使得程序具备通用性(可移植性)。
### 1. 先定义函数函数名(函数的唯一标识) + 函数体(功能代码)
### 2. 调用函数
### 函数定义的语法
## 1. 标准shell的函数定义function 函数名(){函数体linux命令if-else循环变量----(局部变量)return 返回值}
## 2. 简化写法1function 函数名{函数体linux指令if-else循环变量定义使用return 返回值}
## 3. 简化写法2函数名(){函数体return 返回值;}
### 函数调用
函数名
案例:
# 定义函数
function print(){echo "床前明月光"echo "疑是地上霜"echo "举头望明月"echo "低头思故乡"return 10下方不允许在写代码 ---- 不可达
}
# 函数调用
print
- 执行函数时,直接写函数名即可 无需添加其他内容
- 函数必须先定义,再执行 ----- shell脚本是自上向下加载执行
- 想要在函数内部定义局部变量,使用
local 关键字- 函数如果单独写入一个文件里,建议使用 source 去执行该文件
- 函数返回的结果,可以通过 $? (全局变量) 进行获取
return语句和exit语句
相同点:都可以让程序返回
不同点:
1. return 只是代表当前函数执行结束,返回一个结果(返回值)
2. exit 代表当前文件执行结束
3. exit 可以结束当前shell环境,回到上一层 父shell
函数实践
1. 定义函数
2. 执行函数调用
场景一: 在同一个shel文件中,定义和使用函数
案例:
[root@centos-128 abc]# cat fun2.sh
#!/bin/bash
#函数定义
function hello(){echo "HelloWorld"return 100
}#函数调用
hello执行结果:
[root@centos-128 abc]# ./fun2.sh
HelloWorld
[root@centos-128 abc]# echo $?
100[root@centos-128 abc]# set | grep "hello"
[root@centos-128 abc]# hello ### 此时 函数和变量位于子shell环境 父shell 拿不到
-bash: hello: 未找到命令
[root@centos-128 abc]# source fun2.sh ### 将执行的变量和函数 引入当前的 shell环境[source其实是引用
当前的shel环境去执行文件 不开启子shell]
HelloWorld
[root@centos-128 abc]# set | grep "hello"
hello ()
[root@centos-128 abc]# hello
HelloWorld
#source与.#
将执行的变量和函数 引入当前的 shell环境[source其实是引用当前的shel环境去执行文件 不开启子shell]
场景二:
1.函数写在一个文件中,只做定义 不做执行
2.另外一个脚本中 读取该函数文件 且加载该函数
[root@centos-128 abc]# cat fun2.sh
#!/bin/bash
#函数定义
function hello(){echo "HelloWorld"return 100
}
[root@centos-128 abc]# cat fun5.sh
#!/bin/bash
[ -e /abc/fun2.sh ] && source /abc/fun2.sh || exit
hello
[root@centos-128 abc]# ./fun5.sh
HelloWorld
[root@centos-128 abc]# echo $?
100
函数脚本传入参数
[root@centos-128 abc]# cat fun3.sh
#!/bin/bash
function print(){echo "print函数调用执行"echo "第一个参数:$1 第二个参数:$2 第三个参数:$3 传参总个数:$#"
}
[root@centos-128 abc]# cat fun4.sh
#!/bin/bash
[ -e /abc/fun3.sh ] && source /abc/fun3.sh || exit
print $1 $2 $3
[root@centos-128 abc]# ./fun4.sh javascript java vue python
print函数调用执行
第一个参数:javascript 第二个参数:java 第三个参数:vue 传参总个数:3相关文章:
shell脚本之函数
快捷查看指令 ctrlf 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改) 函数 一,什么是函数 函数是一段功能代码,用来解决shell编程中冗余代码[重复且不连续出现的功能…...
订水商城实战教程10-宫格导航
上一篇我们介绍了跑马灯的功能,这一篇就进入到我们的主体部分开发。在订水商城业务中可以按照分类查询商品信息,这就涉及到数据源的拆分。 我们在数据源的设计中区分为主子表,主表呢存储唯一的记录,子表的记录可以重复࿰…...
【C++11】lambda表达式 | 包装器
文章目录 一、 lambda表达式lambda表达式的引入lambda表达式的语法lambda表达式与函数对象lambda表达式的捕捉列表 二、包装器function包装器bind包装器 一、 lambda表达式 lambda表达式的引入 在C98中,为了替代函数指针,C设计出了仿函数,也…...
网络安全准入技术之MAC VLAN
网络准入控制作为主要保障企业网络基础设施的安全的措施,特别是对于中大型企业来说,终端类型多样数量激增、终端管理任务重难度大、成本高。 在这样的一个大背景下,拥有更灵活的动态识别、认证、访问控制等成为了企业网络安全的最核心诉求之…...
MyBatis 操作数据库
文章目录 1. 什么是MyBatis?2. 入门MyBatis2.1 准备工作2.2.1 创建springboot项目2.2.2 数据准备 2.2 配置数据库连接2.3 写持久层代码2.4 单元测试2.4.1 web测试2.4.2 自动测试 1. 什么是MyBatis? MyBatis是一种持久层框架,用于简化JDBC的开…...
设计模式 -- 建造者模式(Builder Pattern)
这个模式以前也义Android-kotlin的场景下讲过 Android 用建造者模式模式写一个Dialog-CSDN博客 不过用的是 变种的建造者模式 建造者模式: 属于创建型模式 提供了一种创建对象的最佳方式, 使用多个简单的对象一步一步构建成一个复杂的对象 。 介绍 意图…...
如何下载 Apache + PHP + Mysql 集成安装环境并结合内网穿透工具实现公网访问内网服务
🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. WampServer下载安装二. WampServer启动三. 安装cpolar内网穿透3.1 注册账号…...
一招告别百度广告烦恼,同时效率提高100倍的几个常用搜索技巧!
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推荐--…...
文件上传 [ACTF2020 新生赛]Upload1
打开题目,发现是一道文件上传题目 随便上传个一句话木马上去 发现网站前端有白名单限制,只能上传含有jpg,png,gif的后缀文件 那我们便传个2.jpg的一句话木马上去,bp抓包 我们改成php文件后缀试试,发现重发…...
振南技术干货集:比萨斜塔要倒了,倾斜传感器快来!(1)
注解目录 1、倾斜传感器的那些基础干货 1.1 典型应用场景 (危楼、边坡、古建筑都是对倾斜敏感的。) 1.2 倾斜传感器的原理 1.2.1 滚珠式倾斜开关 1.2.2 加速度式倾斜传感器 1)直接输出倾角 2)加速度计算倾角 3)倾角精度的提高 (如果…...
手把手教你搭建属于自己的快递小程序
在数字化时代,小程序已经成为各行各业连接用户、提供服务、创造价值的重要工具。其中,快递寄件小程序因其实用性和广泛的需求,成为很多企业和开发者关注的焦点。本文将详细介绍如何快速创建快递寄件小程序,以及如何利用它实现盈利…...
C# Onnx LSTR 基于Transformer的端到端实时车道线检测
目录 效果 模型信息 项目 代码 下载 效果 端到端实时车道线检测 模型信息 lstr_360x640.onnx Inputs ------------------------- name:input_rgb tensor:Float[1, 3, 360, 640] name:input_mask tensor:Float[1, 1, 360, …...
Java相关编程思想
少用继承多用“组合”——在现有类的基础上组织一个新类。 2.继承要用“is”来检验,如果继承者is被继承者,说明这是一个比较好的继承。 3.向上造型,把实现方法留给继承者去实现。(动态绑定) 4.把接口理解为抽象类的进一…...
Hadoop-HDFS架构与设计
HDFS架构与设计 一、背景和起源二、HDFS概述1.设计原则1.1 硬件错误1.2 流水访问1.3 海量数据1.4 简单一致性模型1.5 移动计算而不是移动数据1.6 平台兼容性 2.HDFS适用场景3.HDFS不适用场景 三、HDFS架构图1.架构图2.Namenode3.Datanode 四、HDFS数据存储1.数据块存储2.副本机…...
OpenAI暂停新的ChatGPT Plus注册 | OpenAI 的 GPT Builder 创建您的 GPTs
OpenAI DevDay 才过去仅仅一周时间,伴随着开发者大会上发布的一系列重磅升级和新特性,无疑这样的进化速度让广大网友炸锅了,其火热程度可见一斑。 就在四个小时前,OpenAI的CEO Sam Altma突然宣布,ChatGPT Plus账号暂停…...
Git目录不对,即当前文件夹不对应git仓库
报错信息是: fatal: not a git repository (or any of the parent directories): .git 如: 是当前文件夹不对应git仓库,一般在git clone之后,需要进入下一级文件夹才对应仓库。 在文件夹看,本层中没有.git文件夹&…...
Python基础:正则表达式(regular expression)详解
在Python中,正则表达式是一种强大的工具,可用于匹配和操作字符串。什么是正则表达式? 正则表达式是一种模式匹配语言,用于匹配字符串中的特定模式。这些模式可以是字母、数字、字符组合或其他符号。正则表达式通常用于文本处理、网…...
sqlmap requires ‘python-pymysql‘ third-party library
使用sqlmap进行udf提权报错: [14:06:04] [CRITICAL] sqlmap requires python-pymysql third-party library in order to directly connect to the DBMS MySQL. You can download it from https://github.com/PyMySQL/PyMySQL. Alternative is to use a package pyt…...
05 robotFrameWork+selenium2library 一维数组的使用
一、原生数组: 1、Excel中: LIST_OneRange 项目1|项目2 2、生成的PY: LIST_OneRange [u项目1,u项目2] 3、脚本使用: :FOR ${Local_I} IN RANGE len(${OneRange}) ${value} Evaluate ${OneRange}[${Local_I}] …...
SpringCloud Alibaba组件入门全方面汇总(上):注册中心-nacos、负载均衡-ribbon、远程调用-feign
文章目录 NacosRibbonFeignFeign拓展 Nacos 概念:Nacos是阿里巴巴推出的一款新开源项目,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos致力于帮助用户发现、配置和管理微服务,它提供了一组简单易用的特性集&am…...
小红书数据采集实战:5个Python技巧让爬虫更智能
小红书数据采集实战:5个Python技巧让爬虫更智能 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 在小红书这个拥有数亿用户的社交电商平台上,海量的用…...
3步打造高效右键菜单:让Windows操作提速50%
3步打造高效右键菜单:让Windows操作提速50% 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否也曾在右键点击文件时,面对长达20个选项…...
AI学习路线及建议
1.python快速入门(边用边学,建议3天) 2.人工智能必备数学的基础(边用边学,建议3天) 3.机器学习(找工作面试考点,临面试前晚一点刷) 数据分析:短期找工作 ML/D…...
SiameseAOE中文-base高性能部署:WebUI响应<800ms,吞吐达12QPS(RTX4090)
SiameseAOE中文-base高性能部署:WebUI响应<800ms,吞吐达12QPS(RTX4090) 今天要跟大家聊一个非常实用的工具——SiameseAOE通用属性观点抽取模型。你可能听说过信息抽取,但面对海量文本,如何快速、准确地…...
3步打造自平衡机器人:零基础实战DIY攻略
3步打造自平衡机器人:零基础实战DIY攻略 【免费下载链接】Cubli_Mini 项目地址: https://gitcode.com/gh_mirrors/cu/Cubli_Mini 自平衡机器人作为 robotics 领域的经典项目,一直是爱好者入门的理想选择。Cubli_Mini 作为开源项目中的佼佼者&…...
别再用默认字典了!DVWA暴力破解实战:从Low到High,手把手教你配置Burp Suite的Pitchfork模式
别再用默认字典了!DVWA暴力破解实战:从Low到High,手把手教你配置Burp Suite的Pitchfork模式 在渗透测试的入门阶段,暴力破解往往是最先接触的攻击手段之一。但许多新手在DVWA的High级别面前束手无策——那些看似简单的登录表单&am…...
别再被空白页坑了!用html2canvas + print-js打印Vue/React组件,保姆级避坑指南
彻底解决前端组件打印难题:html2canvas与print-js深度整合实践 在管理后台、数据报表等企业级应用中,精确打印特定组件是刚需,但现代前端框架的组件化特性让这个"简单需求"变得异常棘手。当你的Vue/React组件在屏幕上完美呈现&…...
Laya3D美术进阶:巧用Shader实现APP级游戏效果还原
1. 为什么选择Laya3D的Shader技术? 很多开发者第一次接触Laya3D时,都会有个疑问:为什么不用Unity直接开发?特别是在微信小游戏这个特定场景下,Laya3D的Shader技术到底能带来什么优势?我做了三年Laya小游戏…...
深入解析RS485接口:从硬件设计到工业应用
1. RS485接口基础解析 第一次接触RS485时,我也被它复杂的电气特性搞得一头雾水。直到在工厂里亲眼看到它如何稳定地穿过嘈杂的电机区域传输数据,才真正理解这个老牌工业接口的魅力。RS485本质上是一种差分信号传输标准,采用双绞线进行平衡传…...
实战分享:如何用本地替换和插桩调试搞定Kasada最新版x-kpsdk-cd环境检测
逆向工程实战:Kasada最新版x-kpsdk-cd环境检测的深度调试策略 在当今Web安全防护体系中,Kasada作为新一代反自动化攻击解决方案,其x-kpsdk-cd机制通过动态加密和运行时环境检测构建了强大的防御层。面对从280位扩展到294位的加密数组和Proxy保…...
