[Linux][Shell][Shell函数]详细讲解

目录

  • 1.创建函数
  • 2.执行函数
  • 3.给函数传入参数
  • 4.返回值
  • 5.函数中处理变量
    • 1.全局变量
    • 2.局部变量


1.创建函数

  • 语法:关键字 或 C风格
    function name 
    {commands
    }name()
    {commands
    }
    

2.执行函数

  • 执行Shell函数,直接写函数名即可,无需添加其他内容
  • 函数必须先定义,再执行,Shell脚本自上而下加载
  • 函数体内定义的变量,称之为局部变量
    • 函数内,使⽤local关键字,定义局部变量
  • 函数体内需要添加return语句,作⽤是退出函数,且赋予返回值给调⽤该函数的程序
  • return语句和exit不同
    • return:结束函数的执⾏,返回⼀个(退出值、返回值)
    • exit:结束Shell环境,返回⼀个(退出值、返回值)给当前的shell
  • 函数如果单独写⼊⼀个⽂件⾥,需要⽤source读取
    • 本质:读取到当前环境变量中

3.给函数传入参数

  • 传参和调用形势类似于在命令行中给一个脚本传入参数
    SnowK()
    {echo "传入的参数为$1 $2 $3, 共 $# 个"
    }SnowK I am DieSnowK
    
  • 示例:URL检测脚本
    #!/bin/bashUsage()
    {echo "Usage: $0 url"exit 1
    }# 程序开发的习惯,设置一个入口函数,对需要执行的函数统一管理
    CheckUrl()
    {wget --spider -q -o /dev/null --tries=1 -T 5 $1if [ $? -eq 0 ]thenecho "$1 is Yes"elseecho "$1 is No"fi
    }main()
    {if [ $# -ne 1 ]thenUsagefiCheckUrl $1
    }# $* -> 将所有传入进来的参数,当作一个整体,是常见用法
    main $*
    

4.返回值

  • 函数结束,有状态码
    • 通过$?获得
    • return可以制定特殊的退出状态码
  • 这种方式有一个
    • 函数结束后应⽴即取返回值
      • 否则会被覆盖丢失
    • 退出状态码在0~255之间

5.函数中处理变量

1.全局变量

  • 默认情况下,脚本⾥定义的任何变量都是全局变量,只要不是写在函数体内

2.局部变量

  • ⽆需在函数中使⽤全局变量,函数内部使⽤的任何变量都可以被声明为局部变量,为了实现这⼀点,只需要加上local关键字即可
    func()
    {local temp=$[ $value + 5 ]result=$[ $temp * 2 ]
    }
    

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

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

相关文章

构建Memcached帝国:分布式部署策略与实践指南

构建Memcached帝国:分布式部署策略与实践指南 Memcached作为一个高性能的分布式内存缓存系统,在面对大规模分布式部署时,需要考虑一系列的策略和最佳实践来确保系统的稳定性和效率。本文将深入探讨Memcached分布式部署的注意事项&#xff0c…

教育与社会的发展

生产力与教育的关系 政治经济制度与教育的关系 文化和人口与教育的关系

whereis命令是 Linux 和类 Unix 系统中的一个命令行工具,用于定位二进制程序、源代码和手册页(man pages)的位置

文章目录 1、whereis2、实例 1、whereis whereis 命令是 Linux 和类 Unix 系统中的一个命令行工具,用于定位二进制程序、源代码和手册页(man pages)的位置。当你想要快速找到某个程序或命令的安装位置时,whereis 命令会非常有用。…

跨数据中心复制:Memcached的高效数据同步策略

跨数据中心复制:Memcached的高效数据同步策略 在当今的云计算和大数据时代,跨数据中心的数据复制是确保数据高可用性和灾难恢复的关键技术。Memcached作为一个高性能的分布式内存缓存系统,虽然本身不提供跨数据中心复制的功能,但…

YOLOv10改进 | 添加注意力机制篇 | 添加LSKAttention大核注意力机制助力极限涨点

一、本文介绍 在这篇文章中,我们将讲解如何将LSKAttention大核注意力机制应用于YOLOv10,以实现显著的性能提升。首先,我们介绍LSKAttention机制的基本原理,它主要通过将深度卷积层的2D卷积核分解为水平和垂直1D卷积核&#xff0…

方便好用的C#.Net万能工具库Masuit.Tools

文章目录 简介开发环境安装使用特色功能示例代码1. 检验字符串是否是Email、手机号、URL、IP地址、身份证号等2.硬件监测(需要管理员权限,仅支持Windows,部分函数仅支持物理机模式)3.html的防XSS处理:4.整理Windows系统的内存:5.任…

Web应用安全扫描工具——Wfuzz

Web应用安全扫描工具——Wfuzz 简介 Wfuzz 是一个开源的 Web 应用程序模糊测试工具。它主要用于发现 Web 应用程序中的各种漏洞和隐藏资源。通过向目标发送大量不同的请求,识别出潜在的安全问题,如目录和文件暴露、参数注入、文件上传、认证绕过等。 …

如何搭建互联网医院系统源码?医疗陪诊APP开发实战详解

今天,小编将为大家讲解如何搭建一个完整的互联网医院系统源码,并介绍医疗陪诊APP的开发实战。 一、互联网医院系统的架构设计 搭建一个完整的互联网医院系统,需要从架构设计开始。一个典型的互联网医院系统通常包含以下几个核心模块&#xf…

PyTorch人脸检测

新书速览|PyTorch深度学习与企业级项目实战-CSDN博客 人脸检测解决的问题是确定一幅图上有没有人脸,而人脸识别解决的问题是这张脸是谁的。可以说人脸检测是人脸识别的前期工作。这里介绍Dlib库,它提供了Python接口,里面有人脸检测器&#x…

线程安全(二)synchronized 的底层实现原理、锁升级

目录 一、基础使用1.1 不加锁的代码实现1.2 加锁的代码实现二、实现原理2.1 synchronized 简介2.2 对象监控器(Monitor)2.3 加锁过程第一步:判断 Owner 指向第二步:进入 EntryList 阻塞第三步:主动进入 WaitSet 等待三、锁升级3.1 对象的内存结构3.2 Mark Word 对象头3.3 …

【安全设备】入侵检测

一、什么是入侵检测 入侵检测是一种网络安全技术,用于监测和识别对计算机系统或网络的恶意使用行为或未经授权的访问。入侵检测系统(IDS)是实现这一目标的技术手段,其主要目的是确保计算机系统的安全,通过及时发现并报…

TypeScript中的交叉类型

交叉类型:将多个类型合并为一个类型,使用&符号连接。 type AProps { a: string }type BProps { b: number }type allProps AProps & BPropsconst Info: allProps {a: 小月月,b: 7} 我们可以看到交叉类型是结合两个属性的属性值,那…

【MySQL】6.表的增删查改(CURD)

表的增删查改 一.Create1.单行数据,全列插入2.单行数据,指定列插入3.多行数据插入4.插入,若冲突则更新5.替换 二.Retrieve1.select 列2.where 子句运算符 3.order by 子句4.筛选分页结果 三.Update四.Delete1.删除条目2.截断表 五.插入查询的…

react hooks antd 父组件取子组件form表单的值

在React中,父组件可以使用ref来访问子组件的方法或属性。子组件包含一个表单, 使用forwardRef、useImperativeHandle:forwardRef允许组件使用ref将 DOM 节点暴露给父组件,使用useImperativeHandle暴露方法给父组件。 子组件&#…

蜂窝互联网接入:连接世界的无缝体验

通过Wi—Fi,人们可以方便地接入互联网,但无线局域网的覆盖范围通常只有10~100m。当我们携带笔记本电脑在外面四处移动时,并不是在所有地方都能找到可接入互联网的Wi—Fi热点,这时候蜂窝移动通信系统可以为我们提供广域…

hudi数据湖万字全方位教程+应用示例

1、时间轴(TimeLine) Hudi的核心是维护表上在不同的即时时间(instants)执行的所有操作的时间轴(timeline),这有助于提供表的即时视图 一个instant由以下三个部分组成: 1)…

hnust 1964: 邻接表表示法

hnust 1964: 邻接表表示法 题目描述 输入一个图,用邻接表存储,并实现一些操作。 拷贝下面的代码,按要求完成其中的FirstAdjVex,NextAdjVex,sort和CreateUDG操作,其他地方不得改动。 //图的邻接表存储表示…

Java高级重点知识点-25-Stream流、方法引用

文章目录 Stream流流式思想概述获取流常用方法 方法引用方法引用符通过对象名引用成员方法通过类名称引用静态方法通过super引用成员方法通过this引用成员方法类的构造器引用数组的构造器引用 Stream流 通过循环遍历来讲解流的优势; 要求:筛选所有姓张的…

实现Android夜间模式主题:从入门到精通

实现Android夜间模式主题:从入门到精通 随着用户对夜间模式的需求越来越高,Android开发者需要掌握如何在应用中实现夜间模式。本文将详细介绍在Android中实现夜间模式的步骤,包括配置、实现、以及一些最佳实践,帮助开发者创建更具吸引力和用户友好的应用。 夜间模式的优势…

智能交互中意图的损失、补全与弥聚

智能交互中的“意图的损失”和“意图的补全”通常用于描述在交流过程中可能出现的信息不完整或不清晰导致的情况。意图的损失指的是在信息传递过程中,发送者的意图未能完全或准确地被接收者理解的情况。这种情况可能由多种因素导致,如信息不完整&#xf…