[转帖]Shell编程之函数

shell,编程,函数 · 浏览次数 : 0

小编点评

## Shell 函数使用Shell函数的优点 | 特性 | 使用函数 | |---|---| | 代码可重用性 | 代码可以重复使用,减少代码重复编写 | | 代码可读性 | 使用函数可以清晰地组织代码,提高代码可读性 | | 代码可维护性 | 代码易于维护,更改函数参数或逻辑 | | 代码可扩展性 | 可以轻松添加新的函数 | ## Shell 函数定义使用原则函数传参函数变量的作用范围 1. 函数定义中使用 `function` 或 `function name` 等关键字定义函数名。 2. 函数定义中可以使用 `=`号来定义参数。 3. 每个参数的类型都应该与调用时传递的参数类型匹配。 4. 每个参数都可以使用 `$n` 的形式获取参数的值。 ## 函数递归阶乘递归目录函数库 1. 阶乘函数 `factorial` 接受一个整数作为参数。 2. 阶乘函数定义一个递归函数 `recur`,其中 `$1` 代表第一个参数,`$2` 代表第二个参数。 3. `recur` 函数使用 `$1` 和 `$2` 的值计算阶乘。 4. 递归函数调用自身 `recur` 函数,直到 `$1` 为 0 时退出。 ## 使用Shell函数的优点 1. 代码易于维护和阅读。 2. 代码可重复使用,减少代码重复编写。 3. 可以将大的工程分割为若干小的功能模块。 4. 代码可扩展性强,可以轻松添加新的函数。 ## 使用Shell函数的缺点 1. 函数的返回值只能是一个整数,退出状态码必须在 0 到 255 之间。 **注意**: 1. 每个函数的定义只允许定义一个同名的函数。 2. 可以在函数定义中使用嵌套函数,但嵌套函数必须在定义它的父函数之前定义。

正文


Shell函数

  • 将命令序列按格式写在一起
  • 可方便重复使用命令序列
  • Shell函数定义
    在这里插入图片描述
  • 调用函数的方法
    在这里插入图片描述

使用Shell函数的优点

  • 使用函数可以避免代码重复
  • 使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强

Shell 函数定义

方式一:

function 函数名 {
命令序列
}

方式二:

函数名 () {
命令序列
}

函数返回值
return表示退出函数并返回一个退出值,脚本中可以用 $? 变量显示该值

使用原则

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

举例:
方式一:
在这里插入图片描述
在这里插入图片描述
在这个例子中,abc 函数会提示用户输入一个数,并将输入的数乘以 2 作为返回值。当 abc 函数执行完毕后,使用 echo $? 命令输出函数的退出状态码。
由于 abc 函数返回的是一个数值,因此它的退出状态码也是一个数值。
在这个例子中,假设用户输入的是 3,那么 abc 函数将会返回 6。因此,当执行 echo $? 命令时,输出的结果将会是 6。
需要注意的是,函数的返回值只能是一个整数值,而且在 Shell 中,退出状态码必须在 0 到 255 之间。如果计算结果超出了这个范围,需要对结果进行取模操作,以确保它是一个合法的退出状态码。
在这里插入图片描述
方式二:
在这里插入图片描述
在这里插入图片描述

函数传参

在Shell中,调用函数时可以向其传递参数。
在函数体内部,通过 $n 的形式来获取参数的值
例如,$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递。

方式一:

在这里插入图片描述

在这里插入图片描述
方式二:
在这里插入图片描述
在这里插入图片描述

函数变量的作用范围

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

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

函数递归

函数调用自己本身的函数

阶乘

阶乘(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!

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

递归目录

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

[ -d "$1/$f" ]中,斜杠(/)用于将参数$1和变量$f连接起来,以构造一个路径,用于检查是否存在一个指定的目录。
例如,如果参数$1包含/home/user,变量$f包含mydir,则路径/home/user/mydir将被构造出来,并用于检查是否存在一个名为mydir的目录。
  • 1
  • 2

函数库

函数库只包含函数的定义,脚本中既包含函数的定义也包括可执行的代码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览12760 人正在系统学习中

与[转帖]Shell编程之函数相似的内容:

[转帖]Shell编程之函数

目录 Shell函数使用Shell函数的优点 Shell 函数定义使用原则函数传参函数变量的作用范围 函数递归阶乘递归目录函数库 Shell函数 将命令序列按格式写在一起可方便重复使用命令序列Shell函数定义 调用函数的方法 使用Shell函数的优点 使用函数可以避免代码重复使用函数可以将大的工程

[转帖]Bash脚本编程学习笔记08:函数

https://www.cnblogs.com/alongdidi/p/bash_function.html 官方资料:Shell Functions (Bash Reference Manual) 简介 正如我们在《Bash脚本编程学习笔记06:条件结构体》中最后所说的,我们应该把一些可能反复执行

[转帖]Shell编程之免交互

目录 交互的概念与Linux中的运用Here Document 免交互tee命令重定向输出加标准输出支持变量替换多行注释Expect实例操作免交互预设值修改用户密码创建用户并设置密码实现 ssh 自动登录 交互的概念与Linux中的运用 交互:当计算机播放某多媒体程序的时候,编程人员可以发出指令控制

[转帖]Shell编程之正则表达式与文本处理器(grep、sort、uniq、tr、cut)

目录 正则表达式概念正则表达式的作用元字符grep命令在文本中查找指定的字符串sort命令排序uniq命令快捷去重tr命令替换、压缩和删除cut命令快速裁剪命令expr substr 截取方法cut截取方法 split命令文件拆分paste命令文件合并eval变量扫描器位置锚定分组或其他扩展正则表达

[转帖]shell编程之循环语句

目录 一、循环语句for循环for语句的结构嵌套循环 while语句的结构while语句应用示例 until语句的结构until语句示例 二、跳出循环continue跳出循环break跳出循环 三、常用循环脚本实例循环打印9*9乘法表数字累加脚本(1-100)常用转义字符购物shell 计算器正等腰

[转帖]Bash脚本编程学习笔记10:参数展开

https://www.cnblogs.com/alongdidi/p/bash_parameter_expansion.html 简介 原标题叫做《Bash脚本编程之字符串处理》。 其实这里说得字符串处理,对应的是bash官网中的【Shell Parameter Expansion】,不过直接去看

[转帖]生产环境shell脚本安全之shc编译(转C)

https://www.jianshu.com/p/17399dcd1471 应用场景很多,如,中小项目大多使用mysql,那么在你的mysqladmin备份脚本里可能存在明文的密码,此时由于公司服务器可能多个同事使用,那么转码加密脚本至关重要! 1,首先 SHC安装(建议使用交新版本,如 4.0.

[转帖]shell编程-字符截取命令

grep 命令 命令格式: grep [选项] 查找的字符串 文件名 作用: 在文件中搜索查找字符串,显示匹配字符串所在的行。 选项: -i:查找时忽略大小写。-n:显示行号。-v:反向查找(把不含有要搜索字符串的所有行显示出来)。-c:计算匹配到 ‘搜寻字符串’ 的次数。-r:在指定的目录中查找,

[转帖]Linux Shell编程 循环语法

https://zhuanlan.zhihu.com/ for循环 for 循环是固定循环,也就是在循环时已经知道需要进行几次循环。有时也把 for 循环称为计数循环。语法: for 变量 in 值1 值2 值3… do 程序 done 在这种语法中,for 循环的次数取决于 in 后面值的个数(以

[转帖]linux shell中 if else以及大于、小于、等于逻辑表达式介绍

https://www.jb51.net/article/34332.htm 在linux shell编程中,大多数情况下,可以使用测试命令来对条件进行测试,这里简单的介绍下,方便需要的朋友 比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。注意:这里的空格很重要。要确保方