Shell脚本之函数

news/2024/10/30 13:26:09/

一、函数概念及格式

1、函数的概念

函数定义:封装的可重复利用的具有特定功能的代码

函数就是可以在shell脚本当中做出一个类似自定义执行的命令的东西,最大的功能就是简化我们很多的代码。

  • 将命令序列按照格式书写在一起
  • 可方便重复使用命令序列

2、函数的格式

2.1 格式一

[function] 函数名 (){命令序列[return x]         #使用return或者exit可以显式的结束函数
}

2.2 格式二

函数名(){命令序列
}

二、函数的返回值

1、return的作用

返回函数结果
语法为:return+表达式

语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果。return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值, 由return后面的参数指定。return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误!当执行return语句时,即使函数主体中还有其他语句,函数执行也会停止!

使用原则:

函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码;
退出状态码必须是0~255,超出时值将为除以256取余

2、实例操作一:return返回值

2.1 格式

#!/bin/bashfunction test1 {read -p "请输入一个值:" valuereturn $[$value * 2]}test1  #调用函数
echo $? 

2.2 运行结果

三.函数传参

函数也是有参数的,它的内置变量与shell脚本很类似,函数名称代表示$0,而后续的变量也是以$1、$2…来替换的

1、实例操作一

1.1、格式

#!/bin/bash
sum() {echo "第一个位置参数为$1"echo "第二个位置参数为$2"sum1=$[$1 + $2]echo $sum1
}read -p "请输入第一个参数:" firstread -p "请输入第二个参数:" secondsum $first $second  

2.1、输出结果


 

四、函数变量的作用范围

1、概念

函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令

2、实例操作

2.1 格式

#!/bin/bashfunc () {
local i=10
echo $i
}func
echo $i 

2.2 输出结果

五、函数的递归

函数调用自己本身的函数

1、函数的递归应用:阶乘

阶乘(factorial)是基斯顿·卡曼(Christian Kramp, 1760 – 1826)于1808年发明的运算符号。

阶乘,也是数学里的一种术语。

阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。

例如所要求的数是4,则阶乘式是1×2×3×4,得到的积是24,24就是4的阶乘。 例如所要求的数是6,则阶乘式是1×2×3×……×6,得到的积是720,720就是6的阶乘。例如所要求的数是n,则阶乘式是1×2×3×……×n,设得到的积是x,x就是n的阶乘。

在表达阶乘时,就使用“!”来表示。如h阶乘,就表示为h!

阶乘一般很难计算,因为积都很大。

1.1 格式

#!/bin/bashfact () {if [ $1 -eq 1 ];thenecho 1elselocal temp=$[$1 - 1]local result=$(fact $temp)echo $[$1 * $result]fi
}read -p "请输入一个阶乘的数字:" n
result=$(fact $n)                       #该值跟local result 不同
echo "$n的阶乘结果是 $result"  

1.2 实例操作

六、创建函数库

1、创建函数库格式

#!/bin/bashfact () {if [ $1 -eq 1 ];thenecho 1elselocal temp=$[$1 - 1]local result=$(fact $temp)echo $[$1 * $result]fi
}addition () {echo $[$1 + $2]
}subtraction () {echo $[$1 - $2]
}multiplication () {echo $[$1 * $2]
}division () {if [ $2 -ne 0 ];thenecho $[$1 / $2]elseecho "被除数不能为0"fi
}

2、调用函数脚本格式

. /root/demoq9.shvalue1=$1
value2=$2result1=$(addition $value1 $value2)
result2=$(subtraction $value1 $value2)
result3=$(multiplication $value1 $value2)
result4=$(division $value1 $value2)
result5=$(fact $value1)echo "加法的结果为 $result1"
echo "减法的结果为 $result2"
echo "乘法的结果为 $result3"
echo "除法的结果为 $result4"
echo "$value1的阶乘结果为 $result5"               

3、输出结果


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

相关文章

chatGPT回答字数限制解除-怎么突破chatGPT长度的限制

ChatGPT如何写作 ChatGPT 是一种基于机器学习的自然语言处理技术,可以自动生成文本,包括段落、文章、新闻、电子邮件、推文等。以下是使用 ChatGPT 进行写作的基本过程: 确定写作内容和细节:首先需要 确定要生成的文本内容和相关…

QT桌面的构建

文章目录 前言一、按键类的创建二、按键样式设计三、详细代码讲解总结前言 本篇文章开始我将带大家构建一个属于自己的QT桌面,这个桌面将适用于ARM和Linux等。 一、按键类的创建 首先我们需要创建一个按键类,这个按键类需要包含一个按键和一个lable用来显示按键的名字。 效…

一天吃透计算机网络八股文

网络分层结构 计算机网络体系大致分为三种,OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。最全面的Java面试网站 五层模型:应用层、传输层、网络层、数据链路层、物理层。 应用层:为应用程序提供交互服务…

【面试】记一次安恒面试及总结

文章目录SQL 注入sql注入的原理?如何通过SQL注入判断对方数据库类型?补充一下其他方法判断数据库类型时间盲注的函数XPath注入抓不到http/https包,怎么办?app无自己的ssl证书app有自己的ssl证书-证书绑定(SSL pinning)逻辑漏洞有哪…

数电基础一:原码、反码和补码

一、原理和计算 1、原码 在数字电路中,我们用逻辑电路输出的高低电平表示二进制码1、0,我们有时候需要对正数和负数进行操作,但是在二进制逻辑电路中只有0和1,并没有负号,所以我们在数值的最高位添0表示正数&#xff0…

【Python】字符串 ③ ( Python 字符串格式化 | 单个占位符 | 多个占位符 | 不同类型的占位符 )

文章目录一、Python 字符串格式化1、字符串格式化 - 单个占位符2、字符串格式化 - 多个占位符3、字符串格式化 - 不同类型的占位符一、Python 字符串格式化 在上一篇博客 【Python】字符串 ② ( 字符串拼接 | 字符串与非字符串不能直接拼接 | TypeError: can only concatenate …

@RequestBody与@RequestParam

RequestBody与RequestParamRequestBody了解注解使用注解RequestParam了解注解使用注解总结RequestBody 1、注解RequestBody接收的参数是来自请求体中的,一般用于处理非Content-Type:application/x-www-form-urlencoded编码格式的数据,一般用…

9.Nuxt.js的使用

九.Nust.js的使用 1.什么是SEO 2.百度的搜索结果 3.服务器端和客户端渲染 4.Nuxt.js技术简介 5.Nuxt.js的路由(使用提供的nuxt-app项目初始化) 6.Nuxt.js的页面布局和整体配置 7.Nuxt.js整合axios 九.Nust.js的使用 1.什么是SEO ①SEO SEO是通…