shell脚本中函数的运用

news2024/11/17 1:36:40

shell脚本中函数的运用

  • 一、函数的定义
  • 二、函数的作用范围
  • 三、实验
    • 1、阶乘
    • 2、函数库

一、函数的定义

shell函数是经常使用的,因为有些命令序列是需要反复调用执行的,将命令序列按格式写在一起,以便可以重复的使用。
shell函数:
使用函数可以避免代码重复
使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强
格式为:

[function]  函数名(){
命令序列
[return x]
}
或
函数名 () {
命令序列
}

[function]是可选的,表示该函数的功能,是可以省略掉的,函数后面加一个(),里面是没有内容,而执行的命令序列是放在{}里面的,[return x]的作用是当命令序列执行完后返回给系统的一个值,该项也是可以省略的。
函数返回值:
return表示退出函数并返回一个退出值,脚本可以用$?变量显示该值
使用原则:

1、函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
2、退出的代码必须是0~255,超出时值将为除以256取余

二、函数的作用范围

在 Shell 脚本中函数的执行并不会开启一个新的子Shell,而是仅在当前定义的Shell 环境中有效。如果Shell脚本中的变量没有经过特殊设定,默认在整个脚本中都是有效的。在编写脚本时,有时需要将变量的值限定在函数内部,可以通过内置命令local来实现。

  • 函数内部变量的使用,可以避免函数内外同时出现同名变量对脚本结果的影响。
  • shell脚本中变量默认全局有效
  • local命令:将变量限定在函数内部使用
[root@c7-1 home]# vim dome4.sh 

#!/bin/bash
myfunc () {
local a
a=8
echo $a

}
a=9
myfunc
echo $a


[root@c7-1 home]# bash dome4.sh 
8
9

#上述脚本中myfun函数内部使用了local命令设置变量a,其作用是将变量a限定在函数内部。
#myfun函数外部同样定义了变量i,内部变量a和全局变量i互不影响。
#脚本执行时先调用了函数myfun,函数内部变量a为8,所以输出结果是8。
#调用完函数之后,给变量a赋值为9,再打印外部变量i,所以又输出9

三、实验

1、阶乘

阶乘可以使用for循环做,但是for循环的效率比递归函数低,所以这里使用函数递归的方式写。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

#上述脚本中先运行交互式变量,$n,根据你输入的数字调用函数fa,
#先if判断我输入的数是否等于1,我输入的5,不等于1,条件为假,运行else
#然后定义a变量 $1 -1 也就是 5-1 得出4 ;定义b变量,在把a的值 4 调用给fa;他俩都是内部变量
#然后echo $1 也就是5,乘 $b 4;只有自上而下运行完所有命令 才会再次用$res的调用a,继续判断$tmp是否等于1,直至5-1=4 4-1=3 3-1=2 2-1=1;
#所以5x4x3x2x1=120

2、函数库

先定义一个函数库func,里面写入五个函数
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【C++】STL简介

在C领域我们正式进入到STL的学习,本期我们简单的介绍一下STL 目录 一、什么是STL 二、STL的版本 2.1 原始版本 2.2 P. J. 版本 2.3 RW版本 2.4 SGI版本 三、STL的六大组件 四、STL的缺陷 一、什么是STL STL(standard template libaray-标准模板库)&#x…

保姆级教程!教你打造自己的AI孙燕姿;全程使用AI工具设计一款桌游;搭建基于LLM的客服系统的实践 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『大模型技术与应用思考导图』跟着大佬做判断 王咏刚,创新工场CTO,技术撰稿人,有数个知名出版作品…

Nat. Commun. | 无需参数的几何深度学习,可准确预测蛋白质结合界面

编译 | 曾全晨 审稿 | 王建民 今天为大家介绍的是来自Matteo Dal Peraro团队的一篇关于预测蛋白质结合的论文。蛋白质是生命的重要分子组成部分,由于其特定的分子相互作用而负责大多数生物功能。然而,预测它们的结合界面仍然是一个挑战。作者提出了一种几…

【JS】1676- 重学 JavaScript API - Page Visibility API

在前端开发中,我们经常需要根据页面的可见性来控制资源的使用和提高页面的性能和响应速度。而 JavaScript 中的 Page Visibility API[1] 就提供了一种「检测页面是否可见」的方法。 本文将介绍 Page Visibility API 的概念、使用方法、兼容性和实际应用案例。 什么是…

【负载均衡式的在线oj(1.compile_runner_server模块)】

🎉实战项目:负载均衡式在线OJ 博主主页:桑榆非晚ᴷ 博主能力有限,如果有出错的地方希望大家不吝赐教 给自己打气:成功没有快车道,幸福没有高速路。所有的成功,都来自不倦地努力和奔跑&#xf…

并发编程07:CAS

文章目录 7.1 原子类7.2 没有CAS之前7.3 使用CAS之后7.4 是什么?7.5 CAS底层原理?谈谈对Unsafe类的理解?7.5.1 Unsafe7.5.2 源码分析7.5.3 底层汇编 7.6 原子引用7.7 CAS与自旋锁,借鉴CAS思想7.7.1 是什么?7.7.2 自己实…

K8S管理系统项目实战[API开发]-1

前端: Vueelement plus 后端: gogin kubernetes v1.24.2 golang v1.18.3 后端代码地址GitHub - yunixiangfeng/k8s-platform: K8s管理系统后端: gogin Go 快速入门 Gin Web框架 K8s管理系统项目实战[API开发] 项目背景,整体设计,Client-go&#x…

代码随想录算法训练营day34 | 1005.K次取反后最大化的数组和 ,134. 加油站,135. 分发糖果

代码随想录算法训练营day34 | 1005.K次取反后最大化的数组和 ,134. 加油站,135. 分发糖果 1005.K次取反后最大化的数组和解法一:两次正常排序解法二:一次排序 134. 加油站135. 分发糖果 1005.K次取反后最大化的数组和 教程视频&a…

生态系统服务(InVEST模型应用)

白老师(研究员):长期从事生态系统结构-格局-过程-功能-服务的变化与响应关系等研究工作;重点围绕生物多样性、生态系统服务与价值等,构建生物地球化学模型和评价指标体系,为城市、区域和自然保护区的可持续…

sqli-labs通关(二十三)

第二十三关 这一关是get类型 当输入?id1时,出现报错信息,是由单引号闭合的 但是输入?id1--的时候,还是报错,说明我们的注释符可能被过滤处理了 查看码源,确实是把注释符过滤了 那我们还是根据语句构造 ?id1 or 1…

本地使用3台centos7虚拟机搭建K8S集群教程

第一步 准备3台centos7虚拟机 3台虚拟机与主机的网络模式都是桥接的模式,也就是他们都是一台独立的“主机” (1)kebe-master的配置 虚拟机配置: 网络配置: (2)kebe-node1的配置 虚拟机配…

(二)用Qt实现登录界面——打造简洁、美观的登录体验

文章目录 一、引言1、什么是Qt框架,其主要特点是什么?2、Qt框架的应用范围,如何在不同的平台上开发应用程序?3、Qt框架的优点和劣势,与其他框架的比较。 二、相关技术1、socket编程 三、Qt框架的使用1、Qt框架的基本概…

数据库与身份认证

目录 1.数据库的基本概念 1.1什么是数据库 1.2常见的数据库及分类 1.3传统型数据库的数据组织结构 2.安装并配置MySQL 2.1了解需要安装哪些MySQL相关的软件 2.2 MySQL在 Windows 环境下的安装 3.MySQL的基本使用 3.1使用 MySQL Workbench 管理数据库 3.1.1连接数据库…

CSS 圆锥渐变+MASK遮罩实现WIFI图标

前言 👏CSS 圆锥渐变MASK遮罩实现WIFI图标,速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现步骤 定义css变量–bg背景色,–dot弧宽度,–w父元素宽度,–gap&#xff0c…

docker安装elasticsearch

前言 安装es么,也没什么难的,主要网上搜一搜,看看文档,但是走过的坑还是需要记录一下的 主要参考这三份文档: Running the Elastic Stack on Docker docker简易搭建ElasticSearch集群 Running Kibana on Docker …

模型优化-剪枝 (一)非结构化剪枝

环境 python 3.9numpy 1.24.1pytorch 2.0.0+cu117非结构剪枝 特点 1.简单,将满足某些田间的 weight 置为0即可 2.pytorch容易访问所有参数(weight) 3.最精细化 类型 1.细粒度剪枝(fine-grained) …

数据库创建与管理

目录 一、创建数据库 1.准备创建数据库 2.创建数据库实例分析 方法一:使用对象资源或企业管理器创建数据库 方法二:使用Transact-SQL命令创建数据库 二、管理数据库 1.修改数据库 使用SQL命令修改数据库 2&…

珞珈一号夜间灯光数据处理流程

一、前言 “珞珈一号”卫星是长光卫星技术有限公司首次通过商业化订单为武汉大学研制的卫星,是全球首颗专业夜光遥感卫星,主要用于夜光遥感及导航增强技术验证。卫星整星重量仅为20kg,携带的大视场高灵敏夜光遥感相机,具备130m分辨率、260km幅宽的夜光成像能力,为基于夜光…

【全国大学生统计建模大赛】2023年统计建模大赛赛题解读

目录 关于中国式现代化统计测度的几点思考 (一)房祥忠教授——大局层面 一、现代化释义 二、现代化度量的单变量方法 2.1 单一变量情形 2.2 分组评分 三、现代化度量的多变量方法 3.1 问题 3.2 解决方法 四、现代化度量的理想化方法 4.1 问题 …

SSM整合详细教学(中)

SSM整合详细教学(中) 三、异常处理器问题导入1 异常介绍2 异常处理器2.2.1 编写异常处理器2.2.2 RestControllerAdvice注解介绍2.2.3 ExceptionHandler注解介绍 四、项目异常处理方案问题导入1 项目异常分类2 项目异常处理方案3 项目异常处理代码实现3.1…