Day14 03-Shell函数定义及应用

文章目录

        • 1.11 Shell函数定义及应用

1.11 Shell函数定义及应用

函数代表着一个或一组命令的集合,表示一个功能模块,常用于模块化编程,通常能提升重复利用和简化复杂程序。以下是关于函数的一些重要说明:

  • 在shell中,函数必须先定义,再调用
  • 使用return value来获取函数的返回值
  • 函数在当前shell中执行,可以使用脚本中的变量。

Shell中函数的定义语法如下:

[ function ] funname [()]{action1;.......actionN[return 返回值变量;]
}

注:

  1. 如果函数名后没有(),在函数名和{ 之间,必须要有空格以示区分。
  2. 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  3. 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后的内容以字符串的形式写入,但是执行时会自动转成数值型,范围:数值n(0-255)
  4. 函数返回值,只能通过$? 系统变量获得,可以显示加:return 返回值

Shell中函数的调用语法如下:

语法:
[function] func_name[()] [参数列表]

案例1:

下面的例子定义了一个函数并进行调用:

#函数定义
firstfun(){echo "this is my first function"
}
echo "-------开始-------"#函数调用
firstfun
echo "-------结束-------"

案例2:

带有return语句的函数定义

#函数定义
funwithreturn(){
echo "请输入两个数:"
echo "输入第一个数字为:"
read fnumecho "输入第二个数字为:"
read snumecho "输入两个数分别为:$fnum and $snum"return $(($fnum + $snum))
}#带有return函数调用
funwithreturnecho "输入两个函数之和为:$?"

注意:

  • 函数返回值在调用该函数后通过 $? 来获得。

  • 所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

案例3:

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数,依次类推。带参数的函数示例:

#函数定义
funwithparam(){
echo "第1个参数:$1"
echo "第2个参数:$2"echo "第10个参数:$10"
echo "第10个参数:${10}"echo "第11个参数:${11}"
echo "参数个数:$#"
echo "输出所有参数:$*"
}#调用带参数的函数,参数为: 1 2 3 4 5 6 7 8 9 34 73
funwithparam 1 2 3 4 5 6 7 8 9 34 73

注意:

  • $10 不能获取第十个参数,获取第十个参数需要 10 。当 n > = 10 时,需要使用 {10}。当n>=10时,需要使用 10。当n>=10时,需要使用{n}来获取参数。
  • 参数列表使用空格分开

另外,Shell中还有一些特殊的字符及相应说明,具体如下表所示:

特殊参数处理说明备注
$?表示上一个命令退出的状态码(0-255)
$$表示当前进程编号
$0表示当前脚本名称
$n表示n位置的输入参数(n代表数字,n>=1)
$#表示参数的个数,常用于循环
∗ 和 *和 @都表示参数列表

注:

  • $* 和 $@ 都表示传递给函数或脚本的所有参数,$*与$@区别如下:
    • 不被双引号" "包含时,$* 和 $@ 都以$1 $2 … $n 的形式组成参数列表
    • 当它们被双引号" “包含时, “$*” 会将所有的参数作为一个整体,以”$1 $2 … $n"的形式组成一个整串;“$@” 会将各个参数分开,以"$1" “$2” … “$n” 的形式组成一个参数列表

案例4:

将函数写入脚本中,然后运行:

[root@qianfeng01 ~]# vim ./function1.sh

#!/bin/bash#定义函数
function start() {echo "starting"
}
function stop {echo "stopping"
}
restart() {echo "restarting"
}#打印第一个参数
echo $1#调用函数
restart

运行如下:

[root@qianfeng01 ~]# bash function1.sh  abc
abc
starting

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

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

相关文章

选择器进阶与表单表格

华子目录 选择器并集选择器后代选择器子代选择器伪类选择器伪元素选择器结构选择器属性选择器相邻选择器 表单(form)label标签 表格(table标签)合并单元格 选择器 下面是我们之前学习过的选择器 *{}:通配符选择器&am…

GaussDB(DWS)云原生数仓技术解析:湖仓一体,体验与大数据互联互通

文章目录 前言一、关于数据仓库需求场景分类二、数据仓库线下部署场景2.1、线下部署场景介绍及优劣势说明2.2、线下部署场景对应的客户需求 三、数据仓库公有云部署场景3.1、公有云部署场景介绍及优劣势说明3.2、公有云部署场景对应的客户需求 四、为何重视数据共享&#xff08…

Mybatis中动态SQL标签和内置参数介绍

Mybatis中动态SQL标签和内置参数 一、MyBatis动态SQL 1.1、sql标签 sql标签用于抽取公用的SQL代码&#xff0c;定义sql标签的时候需要通过【id】属性设置唯一标识。 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-…

【Springboot】Springboot如何优雅停机?K8S中Pod如何优雅停机?

什么是优雅停机&#xff1a; 就是对应用进程发送停止指令之后&#xff0c;执行的一系列保证应用正常关闭的操作。这些操作往往包括等待已有请求执行完成、关闭线程、关闭连接和释放资源等 就是对应用进程发送停止指令之后&#xff0c;能保证正在执行的业务操作不受影响&#x…

怎么压缩word文档?

怎么压缩word文档&#xff1f;在互联网技术飞速发展的当代&#xff0c;我们越来越多地依赖于电子文档来传递信息。然而&#xff0c;有时候文件的大小会成为我们传输和存储的一大限制。就拿我们每天都需要使用到的word文档来说吧&#xff0c;我们经常会使用到非常多的word文档&a…

linux之perf(4)stat统计

Linux之perf(4)stat统计 Author&#xff1a;Onceday Date&#xff1a;2023年9月16日 漫漫长路&#xff0c;才刚刚开始… 注&#xff1a;该文档内容采用了GPT4.0生成的回答&#xff0c;部分文本准确率可能存在问题。 参考文档: Tutorial - Perf Wiki (kernel.org)perf-stat…

程序设计课程设计

大二下到大三上的小学期&#xff0c;周期很长&#xff0c;物联负责前后端的搭建&#xff08;虽然说电商负责部分前端&#xff0c;但其实物联自己改更方便&#xff09;。第一次验收就是给看个原型用java swing做基本的跳转操作&#xff0c;第二次验收要展示完整前后端代码&#…

Android 原生内置应用配置

原生内置应用是指安装在操作系统中并由操作系统开发商提供的应用程序。这些应用程序通常在设备出厂时就预装在操作系统中,并且无法轻易移除或更换。原生内置应用的功能通常涵盖了设备的基本功能和服务,例如电话、短信、浏览器、相机、联系人等。 在Android操作系统中,一些常…

matlab检索相似图像

在Matlab中检索相似图像通常需要使用图像处理和计算机视觉技术。以下是一种常见的方法&#xff0c;可以帮助您在Matlab中进行相似图像检索&#xff1a; 准备图像数据库&#xff1a; 首先&#xff0c;您需要有一个包含待检索图像的图像数据库。这些图像应该经过预处理&#xff0…

rabbitmq 面试题

1.交换机类型 RabbitMQ是一个开源的消息队列系统&#xff0c;它支持多种交换机类型&#xff0c;用于在消息的生产者和消费者之间路由和分发消息 Direct Exchange&#xff08;直接交换机&#xff09;&#xff1a;Direct交换机是最简单的交换机类型之一。它将消息按照消息的Rout…

NLP领域可以投稿的期刊或会议(不断更新中……)

目录 引言&#xff1a; 会议 优点&#xff1a; 缺点&#xff1a; 期刊&#xff1a; 优点&#xff1a; 缺点&#xff1a; NLP领域可投稿的期刊或会议 会议 期刊 引言&#xff1a; 作为一名科研工作者&#xff0c;一旦有产出的时候&#xff0c;就会想要写成论文&#…

stable diffusion mode 的使用 invokeAI or stable diffusion web UI?

文章大纲 stable diffusion web UI 离线安装InvokeAI关键参数采样方法微调方法参考文献与学习路径stable-diffusion前序文章stable diffusion web UI 离线安装 [notice] A new release of pip available: 22.2.1 -> 23.2.1 [notice] To update, run: C:\\SDwebui\stable-di…

hiredis笔记

同步调用 连接 redisContext* redisConnect(constchar*ip,intport);发送命令并且获取响应 void *redisCommand(redisContext *c, const char *format, ...);返回的结果结构体为 typedef struct redisReply {int type; /* REDIS_REPLY_* */long long integer; /* The intege…

linux 强大的搜索命令 grep

单文件搜索grep 搜索内容 文件多文件搜索 grep -r ‘搜索内容’ 目录

【Python】Python 连接字符串应优先使用 join 而不是 +

Python 连接字符串应优先使用 join 而不是 简介 字符串处理在大多数编程程序语言中都不可避免&#xff0c;字符串的连接也是在编程过程中经常需要面对的问题。 Python中的字符串与其他一些程序语言如C、Java有一些不同&#xff0c;它为不 可变对象。 一旦创建便不能改变&…

C#,《小白学程序》第二十六课:大数乘法(BigInteger Multiply)的Toom-Cook 3算法及源程序

凑数的&#xff0c;仅供参考。 1 文本格式 /// <summary> /// 《小白学程序》第二十六课&#xff1a;大数&#xff08;BigInteger&#xff09;的Toom-Cook 3乘法 /// Toom-Cook 3-Way Multiplication /// </summary> /// <param name"a"></par…

Ansible自动化:简化你的运维任务

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Matlab图像处理-HSI模型

HSI模型 HSI模型是从人的视觉系统出发&#xff0c;直接使用颜色三要素色调(Hue)、饱和度(Saturation)和亮度&#xff08;Intensity&#xff09;来描述颜色。 亮度是指人眼感知光线的明暗程度。光的能量越大&#xff0c;亮度就越大。 色调是颜色最重要的属性。 它决定了颜色的…

GeoServer(配合Tomcat)安装与配置

GeoServer是什么&#xff1f; GeoServer是用于共享地理空间数据的开源服务器。专为互操作性而设计&#xff0c;它使用开放标准发布来自任何主要空间数据源的数据。GeoServer实现了行业标准的OGC协议&#xff0c;例如Web功能服务 (WFS)&#xff0c;Web地图服务 (WMS) 和Web覆盖…

C++之vector迭代器函数begin、end、rebegin、rend、cbegin、cend、crbegin、crend总结(二百零一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…