shell 脚本之 函数与数组

简介: shell 脚本之 函数与数组

一,函数

(一)函数基本知识

1,函数的形成

在编写脚本时,有些脚本可以反复使用,可以调用函数来解决

语句块定义成函数约等于别名

2,函数使用方法

先定义函数

再使用函数        

3,函数基本格式(三种)

第一种(最常用):

函数名(){

命令序列

}

第二种:

function 函数名 {

命令序列

}

第三种:

function func_name () {

...函数体...

}

4,注意事项

  1. 直接写 函数中调用函数 直接写函数名
  2. 同名函数 后一个生效
  3. 调用函数一定要先定义
  4. 每个函数是独立

5,函数例子

(二)查看函数

declare   -r   看所有函数

declare   -f   看所有函数详细情况

declare   -f   跟函数名    看指定函数详细情况

(三)删除函数

unset 对应函数名

(四)函数的返回值return

1,含义

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

2,使用原则

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

3,return 用法

(五)函数的传参数

函数后面可以  接位置变量

(六)使用函数文件

我们可以新建一个专门存放函数的文件

开头先执行 这个文件

后面就可以调用里面的函数

(七)函数的作用范围

1,函数变量会影响 当前环境

2,因此需要把变量 固定在函数里面 local

(八)函数和 定义变量

1,定义变量

做定义变量 脚本里直接使用

2,函数

做函数时 脚本要先写 color 先调用

(九)检测ip 是否合法

二,函数递归

函数调用自己本身的函数

自己调用自己, 看成 有条件的死循环

(一)函数递归定义

1.函数调用自己本身的函数

2.必须要有结束函数的语句,防止死循环

如  func  () {  echo $i;echo "run fast";let i++;func;  }

这就是个病毒,会不断调用自己

(二)阶乘

阶乘就是1x2x3x4x5x6x7x8....xn

1,for 循环写阶乘

2, 函数写阶乘

例如  5的阶   1x2x3x4x5    就是4的阶乘以5

       6的阶    1x2x3x4x5x6      就是5的阶乘以6

所以把以上两个值作为变量

三,数组

(一)数组定义

可以理解为变量的集合

1,变量与数组

  • 变量:存储单个元素的内存空间
  • 数组:存储多个元素的连续的内存空间,相当于多个变量的集合

2,数组名和索引

  • 索引的编号从0开始,属于数值索引
  • 索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash 4.0版本之后开始支持

  • 定义关联数组 ,一定要先声明  declare

  • bash的数组支持稀疏格式(索引不连续)

(二)定义数组格式

1,定义数组格式:

  1. 数组名=(value0 value1 value2 value3 ......)
  2. 数组名=([0]=value [1]=value1 [2]=value2 ....)
  3. 列表名="value0 value1 value2 value3 ...... "
    数组名=($列表名)
  4. 数组名[0]="value1"
    数组名[1]="value2"
    数组名[2]="value3"

2,数组的包括数据类型

  • 数值型
  • 字符型
  • 混合型数值加字符

使用" "或' '定义单引号或双引号括起来

(三)定义关联数组

1,定义关联数组方法

2,使用关联数组前先声明

declare -a 声明普通属组 -A声明关联数组

普通属组可以不声明

3,声明后再使用关联数组

4,用来追加或者 修改原来的值

(四)数组介绍  与示例

1,基本介绍

2,获取 数组长度

!显示索引

3,数组中  追加变量

4,数组切片

从第三个开始 取两个

从第三个开始取

5,数组替换

不是真换,临时的

6, 数组删除

删除后,对应的索引也会删

7,取数组中最大值和最小值

8,冒泡排序

8.1 冒泡排序含义

数组排序算法:日泡排序类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。

基本思想,冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面 (也就是交换两个元素的位置》,这样较小的元素就像气泡一样从底部上升到顶部。

算法思路冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,此时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置对比和交换次数随排序轮数而减少。

8.2 实验

排序后arr数组值为

相关文章
|
29天前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
70 1
|
1月前
|
存储 Shell
Shell 数组
【10月更文挑战第16天】
30 3
|
15天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
38 2
6种方法打造出色的Shell脚本
|
1天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
9 1
|
6天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
19 2
|
20天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
41 6
|
16天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
Shell Linux C语言
Shell 函数
10月更文挑战第4天
22 7
|
1月前
|
Shell PHP 索引
Shell 数组
10月更文挑战第2天
22 1
|
1月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
46 2