Linux网络——Shell编程之函数

news2025/7/14 0:03:24

Linux网络——Shell编程之函数

  • 一、概述
  • 二、定义函数的格式
      • 1.格式一
      • 2.格式二
  • 三、函数的查看和删除
      • 1.查看 declare
      • 2.删除 declare
  • 四、函数的返回值
      • 1.return 返回值
      • 2.echo 返回值
  • 五、函数的参数传入与变量范围
      • 1.函数的传参
      • 2.函数变量的作用范围
  • 六、函数的应用
      • 1.阶乘
      • 2.递归目录

一、概述

在shell脚本中,存在着大量的命令操作,其中有很多编写的代码的重复性很高,让代码出现了大量的冗余和繁琐,不易维护和解读。

作用:定义较为复杂的但是需要重复使用的内容,以便再次使用可以直接调用函数节约时间,提高效率。

二、定义函数的格式

1.格式一

function 函数名 {
	命令序列
}

在这里插入图片描述

2.格式二

函数名() {
	命令序列
}

在这里插入图片描述

三、函数的查看和删除

1.查看 declare

语法: declare -F
在这里插入图片描述

2.删除 declare

语法:unset 函数名
在这里插入图片描述

四、函数的返回值

1.return 返回值

return表示退出函数并返回一个退出值,脚本中可以用 $ ? 变量显示该值
使用原则:
函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
退出状态码必须是0~255,超出时值将为除以256取余

在这里插入图片描述

2.echo 返回值

echo对于linux来讲就是一个万能输出的工具,当 return 不能满足我们我们对返回值的需求时,可以强迫echo来充当返回值输出工具

在这里插入图片描述

五、函数的参数传入与变量范围

1.函数的传参

函数内部:
函数体内部的 $1、$2 代表的是调用函数时,函数后面跟的位置参数
在函数体内部的 $#代表调用函数时,函数后面跟的参数个数
在函数体内部的$@、$*代表调用函数时,函数后面跟的所有参数

函数外部:
函数体外的$1、$2 代表的是执行脚本时,脚本后面跟的位置参数
在函数体外时,$# 代表的是执行脚本时,脚本后面跟的参数个数
在函数体外时,$* 、$@ 代表的是执行脚本时,脚本后面跟的所有参数

2.函数变量的作用范围

函数默认只能脚本内的 shell 环境有效(使用source执行脚本,也会影响系统的当前shel环境)
脚本中的变量默认全局有效 (即函数体内外都有效)
在函数体内执行 local 变量 ,可将变量限定在函数体内部使用

六、函数的应用

1.阶乘

#!/bin/bash
##使用函数的递归实现阶乘
test1() {
  if [ $1 -eq 1 ]
  then
    echo 1
  elif [ $1 -gt 1 ]
  then
    local temp=$[$1 - 1]
    local result=$(test1 $temp)
    echo $[$1 * result]
  else
    echo "输入的内容无效,请重新输入内容"
  fi
}
########### main ################
read -p "请输入内容的整数:" num
result=$(test1 $num)
echo "$num的阶乘为$result"

在这里插入图片描述

2.递归目录

#!/bin/bash
###使用函数递归目录,如果是文件直接输出文件名,如果是目录则输出目录名且输出此目录下的所有目录和文件名
function list_files {
for f in `ls $1`
do
   if [ -d "$1/$f" ]
   then
      echo "$2$f"
      list_files "$1/$f" " $2"
   else
       echo "$2$f"
   fi
done
}

############## main #####################
read -p "请输入需要查询的目录:" num
list_files "/$num" ""

在这里插入图片描述

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

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

相关文章

知识不断分叉,知怎么来,才知怎么去

知识不断分叉,知怎么来,才知怎么去 定位方法论在中国的演化和继承 趣讲大白话:知道什么来,方知怎么去 【趣讲信息科技159期】 **************************** 定位也谈不上是科学意义上的理论 而是商业实践方法 不能神话 但也要有基…

深入了解目标检测技术--从基本概念到算法入门

前言: Hello大家好,我是Dream。 众所周知,目标检测是计算机视觉领域中的重要任务之一,其目的是识别图像或视频中包含的物体实例并将其定位。实现目标检测可以帮助人们在自动驾驶、机器人导航、安防监控等领域中更好地理解和应用图…

K_A37_002 基于STC89C52RC驱动PCF8591模块 串口与OLED0.96双显示

K_A37_002 基于STC89C52RC驱动PCF8591模块 串口与OLED0.96双显示 所有资源导航一、资源说明二、基本参数参数引脚说明 三、驱动说明IIC地址/采集通道选择/时序对应程序: 四、部分代码说明1、接线引脚定义1.1、STC89C52RCPCF8591模块 五、基础知识学习与相关资料下载六、视频效果…

JavaScript的基础语法

目录 一、初识JavaScript(简称JS) 1.JavaScript 运行过程 2.JavaScript 的组成 二、JavaScript的规范与调试 1.JavaScript 的书写形式 1.1 行内式 1.2 内嵌式(建议写在之前) 1.3 外部式(建议写在之前&#xf…

基于 SpringBoot+Vue 的在线学习平台(附源码)

摘 要 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括学习平台的网络应用,在外国学习平台已经是很普遍的方式,不过国内的管理平台可能还处于起步阶段。学习平台具有学习信息管理功能的选择。学习平台…

【Java|golang】2437. 有效时间的数目

给你一个长度为 5 的字符串 time ,表示一个电子时钟当前的时间,格式为 “hh:mm” 。最早 可能的时间是 “00:00” ,最晚 可能的时间是 “23:59” 。 在字符串 time 中,被字符 ? 替换掉的数位是 未知的 ,被替换的数字…

大型数据库期末总复习【SQL server 2008 基础教程】

一、概述 1.Microsoft SQL Server系统的体系结构 Microsoft SQL Server 2008系统由4个主要部分组成。这4个部分被称为4个服务,这些服务分别是数据库引擎、分析服务、报表服务和集成服务。这些服务之间相互存在和相互应用,它们的关系示意图如图所示&…

Web安全:AppScan 安装和使用.(渗透常用工具)

Web安全:AppScan 安装和使用. AppScan是一款web安全扫描工具,可以利用爬虫技术进行网站安全渗透测试,根据网站入口自动对网页链接进行安全扫描,扫描之后会提供扫描报告和修复建议等. 目录: Web安全:AppSc…

【CSS系列】第四章 · CSS字体属性

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

51单片机(八)串口通信

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

网易云音乐开发--video模块开发

video页面头部搭建 首先头部的结构是这样的 这里采用的是淘宝双飞翼布局。俩端固定,中间自适应。 这里说一下这个flex:1 flex-grow:可拉伸 flex-shrink:可压缩 flex-basis:当前元素的宽度 flex默认值:flex-grow:0,flex-shrink:1,flex-basis:auto flex:1 flex-gr…

Linux一学就会——系统文件I/O

Linux一学就会——系统文件I/O 有几种输出信息到显示器的方式 #include <stdio.h> #include <string.h> int main() {const char *msg "hello fwrite\n";fwrite(msg, strlen(msg), 1, stdout);printf("hello printf\n");fprintf(stdout, &q…

DEJA_VU3D - Cesium功能集 之 106-鹰眼地图

前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小140个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(每篇博文都会奉上完整demo的源代码…

如何使用 YOLOv8 神经网络检测图像中的物体

对象检测是一项计算机视觉任务,涉及识别和定位图像或视频中的对象。它是许多应用的重要组成部分,例如自动驾驶汽车、机器人和视频监控。 多年来,已经开发了许多方法和算法来查找图像中的对象及其位置。执行这些任务的最佳质量来自使用卷积神经网络。 YOLO 是这项任务最流行的…

计算机网络——快速了解传输层协议

文章目录 一、TCP和UDP的区别二、TCP1.TCP报文段2.建立连接&#xff08;三次握手&#xff09;3.断开连接&#xff08;四次挥手&#xff09;4.TCP提供的支持 三、UDP参考 一、TCP和UDP的区别 传输层协议有两个——TCP和UDP&#xff0c;二者区别如下&#xff1a; 二、TCP 1.TCP…

MySQL集群

目录 主从复制 主从复制流程&#xff1a; 为什么要有relay log中继日志&#xff1f; 为什么要有主从复制&#xff0c;好处&#xff1f; 实际生产环境中。如果对MySQL数据库的读写都在一台数据库服务器中操作&#xff0c;无论是再安全性、高可用性&#xff0c;还是高并发性等…

MapReduce之WordCount本地测试

1&#xff09;需求 在给定的文本文件中统计输出每一个单词出现的总次数。 &#xff08;1&#xff09;输入数据 2&#xff09;期望输出数据 banzhang 1 cls 2 hadoop 1 jiao 1 ss 2 xue 1 2&#xff09;需求分析 按照MapReduce编程规范&#xff0c;分别编写Mapper&#x…

跨境电商支付平台-PingPong Pay(实现收银台模式沙箱支付)

介绍 PingPongCheckout 跨境支付的 API 接口文档,商户服务器和 PingPongCheckout 服务器进行交互。 供商户/平台服务方的技术开发及测试相关人员使用。 本文档分别从交互流程、通讯方式、签名方 案、交易接口、注意事项等⻆度详细介绍了 PingPongCheckout 跨境支付 API 接口的…

【C++】类和对象(中篇)

几个成员函数 类的6个默认成员函数构造函数引例特点 析构函数概念特点 拷贝构造函数概念特征 赋值运算符重载赋值运算符重载赋值运算符只能重载成类的成员函数不能重载成全局函数前置和后置重载 日期类的实现const成员函数取地址及const取地址操作符重载 类的6个默认成员函数 …

Web缓存利用分析(二)

导语&#xff1a;在上一篇文章中&#xff0c;大致介绍了一些关于Web Cache的攻击方式及CTF中的一些出现。而本篇文章则会聚焦于Web Cache在学术前沿的一些攻击利用方式的探究。 前言 在上一篇文章中&#xff0c;大致介绍了一些关于Web Cache的攻击方式及CTF中的一些出现。而本…