shell 脚本之 函数与数组

一,函数

(一)函数基本知识

1,函数的形成

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

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

2,函数使用方法

先定义函数

再使用函数        

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

第一种(最常用):

函数名(){

命令序列

}

第二种:

function 函数名

命令序列

}

第三种:

function func_name () {

...函数体...

}

4,注意事项

  1. 直接写 函数中调用函数 直接写函数名

  2. 同名函数 后一个生效

  3. 调用函数一定要先定义

  4. 每个函数是独立

5,函数例子

shell 脚本之 函数与数组_第1张图片

(二)查看函数

declare   -r   看所有函数

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

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

shell 脚本之 函数与数组_第2张图片

(三)删除函数

unset 对应函数名

(四)函数的返回值return

1,含义

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

2,使用原则

  1. 函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码

  2. 退出码必须是0-255,超出的值将为除以256取余

3,return 用法

shell 脚本之 函数与数组_第3张图片

shell 脚本之 函数与数组_第4张图片

(五)函数的传参数

函数后面可以  接位置变量

shell 脚本之 函数与数组_第5张图片

(六)使用函数文件

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

开头先执行 这个文件

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

(七)函数的作用范围

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

shell 脚本之 函数与数组_第6张图片

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

shell 脚本之 函数与数组_第7张图片

(八)函数和 定义变量

1,定义变量

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

shell 脚本之 函数与数组_第8张图片

2,函数

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

shell 脚本之 函数与数组_第9张图片

shell 脚本之 函数与数组_第10张图片

(九)检测ip 是否合法

shell 脚本之 函数与数组_第11张图片

shell 脚本之 函数与数组_第12张图片

二,函数递归

函数调用自己本身的函数 

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

(一)函数递归定义

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

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

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

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

(二)阶乘

阶乘就是1x2x3x4x5x6x7x8....xn

1,for 循环写阶乘

shell 脚本之 函数与数组_第13张图片

shell 脚本之 函数与数组_第14张图片

2, 函数写阶乘

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

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

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

shell 脚本之 函数与数组_第15张图片

三,数组

(一)数组定义

可以理解为变量的集合

1,变量与数组

  • 变量:存储单个元素的内存空间

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

2,数组名和索引

  • 索引的编号从0开始,属于数值索引

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

shell 脚本之 函数与数组_第16张图片

  • 定义关联数组 ,一定要先声明  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,定义关联数组方法

shell 脚本之 函数与数组_第17张图片

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

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

普通属组可以不声明

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

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

shell 脚本之 函数与数组_第18张图片

(四)数组介绍  与示例

1,基本介绍

shell 脚本之 函数与数组_第19张图片

2,获取 数组长度

!显示索引

shell 脚本之 函数与数组_第20张图片

3,数组中  追加变量

shell 脚本之 函数与数组_第21张图片

4,数组切片

从第三个开始 取两个

shell 脚本之 函数与数组_第22张图片

 从第三个开始取

shell 脚本之 函数与数组_第23张图片

5,数组替换

不是真换,临时的

shell 脚本之 函数与数组_第24张图片

6, 数组删除

shell 脚本之 函数与数组_第25张图片

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

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

shell 脚本之 函数与数组_第26张图片

shell 脚本之 函数与数组_第27张图片

8,冒泡排序

8.1 冒泡排序含义

数组排序算法:日泡排序类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。
基本思想,冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面 (也就是交换两个元素的位置》,这样较小的元素就像气泡一样从底部上升到顶部。
算法思路冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,此时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置对比和交换次数随排序轮数而减少。

8.2 实验

shell 脚本之 函数与数组_第28张图片

shell 脚本之 函数与数组_第29张图片

排序后arr数组值为

你可能感兴趣的:(linux,运维,服务器)