linux系统函数的运用

news/2025/3/27 13:00:07/

函数

  • 函数详解
    • 函数的作用
    • 函数的定义
    • 函数的返回值
    • 函数的作用范围
    • 函数传参
    • 函数递归
    • 函数库

函数详解

函数的作用

  • 在编写shell脚本的时候,经常会发现在多个地方使用了同一段代码,如果只是一小段代码,一般也无关紧要,但是要在脚本中多次重写大块代码的话就太累了,shell中的函数就可以解决这个问题,可以将代码放进函数体封装起来,在需要的地方直接调用它就可以了,它可以提高脚本的可读性和重用性。

函数的定义

1、function 函数名{

命令序列

}

2、函数名(){

命令序列

}
3、注意:函数名不要和系统命令名称冲突
在这里插入图片描述
在这里插入图片描述

函数的返回值

默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码,在函数执行结束后,可以用标准变量 $?来确定函数的退出状态码

return 执行到此命令时会结束本次执行的函数,后面跟的数字可以自定义返回值,$?可以查看这个返回值。
在这里插入图片描述
在这里插入图片描述
当执行到函数中的== return 命令时会退出本次函数的执行==,可以继续执行脚本的其它命令。 return 后面跟的值可以通过 echo $? 打印出来。

函数的退出状态码(返回值)必须是 0 - 255 超出时值为除以256取余。

函数的作用范围

  • 在 Shell 脚本中函数的执行并不会开启一个新的子Shell,而是仅在当前定义的Shell 环境中有效。
  • 如果Shell脚本中的变量没有经过特殊设定,默认在整个脚本中都是有效的。
  • 在编写脚本时,有时需要将变量的值限定在函数内部,可以通过内置命令local来实现。
  • 函数内部变量的使用,可以避免函数内外同时出现同名变量对脚本结果的影响。
  • shell脚本中变量默认全局有效
  • local命令:将变量限定在函数内部使用

在这里插入图片描述

最后输出的结果是函数中aa的变量值
在这里插入图片描述
在这里插入图片描述

函数传参

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

脚本的第二位置变量,传给了函数的第一位置变量。

不管在函数体内还是在函数体外 $0 都代表脚本本身

函数递归

用函数的递归方式算阶乘
在这里插入图片描述

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

当 $1 为5时不满足=1的条件会自减1然后继续传参给fa函数,然后还是不满足=1的条件继续自减1之后传参给fa函数,直到减到1为止传参给fa输出的结果为1,将1赋值给b之后执行最后输出的结果是21,21是 fa 2 的输出结果,321是 fa 3 的输出结果,432*1是 fa 4 的输出结果,所以fa 5 的输出结果为5x4x3x2x1=120。

函数库

函数库可以避免多个脚本使用相同的函数,在多个脚本中重复输入。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/66615.html

相关文章

RabbitMQ消息队列实战(5)—— 发后即忘和远程RPC数据传输模型

本文我们学习下使用RabbitMQ实现的几种数据发送的模型——发后即忘模型和远程RPC调用。二者实际上是从业务的角度定义的一个RabbitMQ的使用模型。发后即忘模型,强调发送时不太关心消息接收者的执行结果,仅仅是为了发送信息。而远程RPC调用模型强调&#…

Kali-linux应用更新和配置额外安全工具

本节将介绍更新Kali的过程和配置一些额外的工具。这些工具在后面的章节中将是有用的。Kali软件包不断地更新和发布之间,用户很快发现一套新的工具比最初在DVD ROM上下载的软件包更有用。本节将通过更新安装的方法,获取Nessus的一个激活码。最后安装Squid…

KingbaseES 复制冲突之锁类型冲突

背景 昨天遇到客户现场的一个有关复制冲突的问题 备库报错:ERROR: canceling statement due to conflict with recovery,user was holding a relation lock for too long 现场情景是备库执行逻辑备份过程中出现的报错,逻辑备份相当于备库查询…

yolov5 用自己的数据集进行训练

在训练之前先要按照一定目录格式准备数据: VOC标签格式转yolo格式并划分训练集和测试集_爱钓鱼的歪猴的博客-CSDN博客 目录 1、修改数据配置文件 2、修改模型配置文件 3、训练 1、修改数据配置文件 coco.yaml 拷贝data/scripts/coco.yaml文件, pa…

k8s二进制搭建|ETCD + Flannel | 单节点部署 | 多节点的部署|dashbord的部署

k8s二进制搭建|ETCD Flannel | 单节点部署 | 多节点的部署|dashbord的部署 二进制搭建 Kubernetes v1.201 初始化环境2 部署 docker引擎3 在mster 192.168.10.10上操作4 在 node01 192.168.10.20节点上操作5 在 node02 192.168.10.30节点上操作6 检查etcd群集状态7 部署 Maste…

Java设计模式(二十二)策略模式

一、概述 策略模式是一种行为型设计模式,它允许在运行时选择算法的行为。策略模式通过将算法封装成独立的策略类,使得它们可以相互替换,而不影响使用算法的客户端。这样可以使客户端代码与具体算法的实现细节解耦,提高了代码的可…

03FPGA—led灯的显示(入门)

学习fpga也有段时间了,但后台有几个朋友问我能不能分享一点简单入门例子,于是我打算发经典的如何控制led的例子,本文主要分享设计流程以及简单的verilog语法。 设计流程主要包括五个步骤模块设计、波形设计、编写rtl代码、仿真验证、上板验证&#xff0c…

r语言tidyverse教程:4 dplyr

文章目录 简介和数据准备行列筛选mutate数据概述集合运算 R语言系列: 编程基础💎循环语句💎向量、矩阵和数组💎列表、数据帧排序函数💎apply系列函数tidyverse:readr💎tibble💎tidy…