课时85:流程控制_函数基础_基础知识

2.1.1 基础知识

这一节,我们从 基础知识、简单实践、小结 三个方面来学习。

基础知识

场景需求

	在shell脚本的编写过程中,我们经常会遇到一些功能代码场景:多条命令组合在一起,实现一个特定的功能场景逻辑、一些命令在脚本内部的多个位置频繁出现。在这些场景的代码量往往不多,但是频繁使用的话,会导致脚本的整体逻辑脉络比较松散和框架散乱。所以我们需要一种脚本逻辑,不仅仅能够满足松散代码的功能目的,还能精简重复的代码。函数就是来满足这种场景的解决方案 -- 而函数,也是所谓的面向对象编程的一种表现样式。

函数

	所谓的函数,本质上就是一段能够满足特定功能的代码块。一旦定义好函数代码后,我们就可以在脚本的很多位置随意的使用。定义功能代码块的动作叫 函数定义,使用函数代码的动作叫 函数调用。
函数的优势:1. 代码模块化,调用方便,节省内存2. 代码模块化,代码量少,排错简单3. 代码模块化,可以改变代码的执行顺序

基本语法

定义函数:样式1:标准格式function 函数名{		函数体				}						样式2:简约格式函数名() {		函数体				}
注意:function 的作用和 () 的作用是一样的,都是定义一个函数。函数的名称是自定义的,而且在脚本范围内必须唯一。函数体内是普通的能够正常执行的命令,命令的执行流程符合顺序逻辑。
调用函数:			函数名					
注意:函数名出现在任何位置,就代表在该位置调用函数内代码块的执行。函数名一般在函数定义后调用,否则的话会发生报错。

简单实践

实践1-标准函数的实践

[root@localhost ~]# cat function_simple_test.sh
#!/bin/bash
# 功能:简单函数的定义和调用# 定制一个函数,提示脚本的使用方式
function Usage {echo -e "\e[31m脚本的使用帮助信息: xxx\e[0m"
}# 定制脚本使用逻辑
if [ $# -eq 1 ]
thenecho "您输入的脚本参数是1个"
elseUsage
fi
脚本执行效果
[root@localhost ~]# /bin/bash function_simple_test.sh
脚本的使用帮助信息: xxx
[root@localhost ~]# /bin/bash function_simple_test.sh aa
您输入的脚本参数是1个
[root@localhost ~]# /bin/bash function_simple_test.sh aa bb
脚本的使用帮助信息: xxx

实践2-变种函数的实践

[root@localhost ~]# cat function_simple_test2.sh
#!/bin/bash
# 功能:简单函数的定义和调用# 定制一个函数,提示脚本的使用方式
Usage() {echo -e "\e[31m脚本的使用帮助信息: xxx\e[0m"
}# 定制脚本使用逻辑
if [ $# -eq 1 ]
thenecho "您输入的脚本参数是1个"
elseUsage
fi
脚本执行效果
[root@localhost ~]# /bin/bash function_simple_test2.sh
脚本的使用帮助信息: xxx
[root@localhost ~]# /bin/bash function_simple_test2.sh aa
您输入的脚本参数是1个
[root@localhost ~]# /bin/bash function_simple_test2.sh aa bb
脚本的使用帮助信息: xxx

实践3-函数的调用顺序和名称唯一 实践

[root@localhost ~]# cat function_simple_test3.sh
#!/bin/bash
# 功能:简单函数的定义和调用# 定制一个函数,提示脚本的使用方式
Usage() {echo -e "\e[31m脚本的使用帮助信息: xxx\e[0m"
}
echo "第一次调用效果: "
Usage# 定制同名的函数,提示脚本的使用方式
Usage() {echo -e "\e[31m脚本的使用帮助信息-------: xxx\e[0m"
}
# 定制脚本使用逻辑
if [ $# -eq 1 ]
then# 调用一个后面才会生成的函数func
elseUsage
fi# 定制一个函数
func() {echo "您输入的脚本参数是1个"
}
脚本执行效果
[root@localhost ~]# /bin/bash function_simple_test3.sh
第一次调用效果:
脚本的使用帮助信息: xxx
脚本的使用帮助信息-------: xxx
[root@localhost ~]# /bin/bash function_simple_test3.sh a
第一次调用效果:
脚本的使用帮助信息: xxx
function_simple_test3.sh:行18: func: 未找到命令结果显示:函数名称重复的话,会导致同名函数被覆盖函数在没有定义前调用的话,会导致异常报错

小结


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

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

相关文章

jvisualvm 使用教程

之前看过 jvisualvm,但是那个时候对 JVM 并不是很熟悉,后面看了下八股文,看了下 JVM 的相关知识之后,发现多了解点 JVM 的东西,对我们 CRUD 其实是有指导意义的,就比如我们通常会 new 一堆的没有用到的对象…

opencv-python库 cv2逐帧读取视频cv2.VideoCapture()

cv2.VideoCapture 是 OpenCV(cv2)库中的一个类,用于捕获摄像头视频或读取视频文件。以下是 cv2.VideoCapture 的详细用法: 连接摄像头或读取视频文件 创建 VideoCapture 对象:使用 cv2.VideoCapture() 函数创建一个 Vi…

使用 Spring Email 和 Thymeleaf 技术,向新注册用户发送激活邮件(二)

本篇博客对应“2.2 开发注册功能”小结 对应视频: 开发注册功能 开发注册功能-续 注册功能是相对比较复制的功能,对于一个相对复杂的功能,可以把这个功能进行拆解。把这个功能的流程想清楚,就知道怎么拆解了: 也可以按照请求进行…

[每周一更]-第92期:Go项目中的限流算法

这周五在清明假期内,提前更新文章 很多业务会有限流的场景,比如活动秒杀、社区搜索查询、社区留言功能;保护自身系统和下游系统不被巨型流量冲垮等。 在计算机网络中,限流就是控制网络接口发送或接收请求的速率,它可防…

#git 撤消对文件的更改

Git 命令 git checkout -- readme.txt 解析 命令 git checkout -- readme.txt 的作用是撤销对 readme.txt 文件的修改。 具体来说,该命令会将 readme.txt 文件恢复到以下两种状态之一: 1. 未修改状态 如果 readme.txt 文件自修改后还没有被添加到暂存…

【算法练习】28:选择排序学习笔记

一、选择排序的算法思想 弄懂选择排序算法,先得知道两个概念:未排序序列,已排序序列。 原理:以升序为例,选择排序算法的思想是,先将整个序列当做未排序的序列,以序列的第一个元素开始。然后从左…

K8S - Deployment 的版本回滚

当前状态 先看deployment rootk8s-master:~# kubectl get deploy -o wide --show-labels NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES …

理解pytorch的广播语义

目录 什么是广播运算 广播的条件 示例 示例1 示例2 示例3 补1 示例4 原位运算 示例5 参与广播运算的两个tensor,必须是从右向左对齐 总结规律 两个tensor可以做广播运算的条件: 两个可以互相广播的tensor运算的步骤: 例子&#x…

【深度学习】深度学习md笔记总结第3篇:TensorFlow介绍,学习目标【附代码文档】

深度学习笔记完整教程(附代码资料)主要内容讲述:深度学习课程,深度学习介绍要求,目标,学习目标,1.1.1 区别,学习目标,学习目标。TensorFlow介绍,2.4 张量学习目标,2.4.1 张量(Tensor),2.4.2 创建张量的指令,2.4.3 张量…

整数与浮点数在内存中的存储

整数与浮点数在内存中的存储 一,大小端存储二,整数在内存中的存储三,浮点数在内存中的存储3.1浮点数的存储规则3.2浮点数的存储过程3.2.1有效数字M3.2.2指数E3.2.3浮点数存储的特殊情况4,例题讲解 在C语言的编程中,我们…

分布式系统架构中的相关概念

1.1、衡量网站的性能指标 响应时间:指执行一个请求从开始到最后收到响应数据所花费的总体时间。并发数:指系统同时能处理的请求数量。 并发连接数:指的是客户端向服务器发起请求,并建立了TCP连接。每秒钟服务器连接的总TCP数量请…

Python--Django--说明

Django 是基于python 的 Web 开发框架. &nsbp;   Web开发指的是开发基于B/S 架构, 通过前后端的配合, 将后台服务器上的数据在浏览器上展现给前台用户的应用. &nsbp;   在早期, 没有Web框架的时候, 使用 Python CGI 脚本显示数据库中的数据. Web框架致力于解决一些…

c++宏有什么离谱操作?

Boost.Preprocessor确实是一个非常强大而复杂的C宏库,专门用于元编程,即在编译时进行代码生成和变换。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习编程不妨点个关注,给个评论222&…

面试总结------2024/04/04

1.面试官提问:你说你在项目中使用springsecurity jwt 实现了登录功能,能简单讲一下怎么实现的吗? 2.使用RabbitMQ实现订单超时取消功能 订单状态定义 首先,我们需要定义订单的不同状态。在这个示例中,我们可以定义以下…

实验一 Windows 2008虚拟机安装、安装VM Tools、快照和链接克隆、添加硬盘修改格式为GPT

一、安装vmware workstation软件 VMware workstation的安装介质,获取路径: 链接:https://pan.baidu.com/s/1AUAw_--yjZAUPbsR7StOJQ 提取码:umz1 所在目录:\vmware\VMware workstation 15.1.0 1.找到百度网盘中vmwa…

分布式限流——Redis实现令牌桶算法

令牌桶算法 令牌桶算法(Token Bucket Algorithm)是一种广泛使用的流量控制(流量整形)和速率限制算法。这个算法能够控制网络数据的传输速率,确保数据传输的平滑性,防止网络拥堵,同时也被应用于…

Pandas Dataframe合并连接Join和merge 参数讲解

文章目录 函数与参数分析otheronhowlsuffix, rsuffix, suffixesleft_index, right_index 函数与参数分析 在pandas中主要有两个函数可以完成table之间的join Join的函数如下: DataFrame.join(other, onNone, how‘left’, lsuffix‘’, rsuffix‘’, sortFalse, v…

YOLOv8 UI界面设计+热力图显示

进入可视化设计界面,设计UI pyside6-designer 设计好UI保存,然后通过以下命令将ui文件保存为py pyside6-uic myui.ui > myui.py 通过以下命令将资源文件qrc保存为py pyside6-rcc my_rc.qrc > my_rc.py 写主窗口函数实现功能... 项目基于yol…

基于Spring Boot的职称评审管理系统

基于Spring Boot的职称评审管理系统 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 部分系统展示 前台首页界面 用户注册登录界面 管理员登录界面 个人中心界面…

python - Django创建项目

项目运行命令 根目录下运行命令:   python manage.py runserver win环境创建项目 直接使用 Pycharm 创建项目 在 cmd 或 Linux 命令行环境下创建 Django 项目 django-admin startproject mysite 这样就会在当前目录下创建一个叫做 mysite 的Django项目。   可以看到Djang…