一,函数
(一)函数基本知识
1,函数的形成
在编写脚本时,有些脚本可以反复使用,可以调用函数来解决
语句块定义成函数约等于别名
2,函数使用方法
先定义函数
再使用函数
3,函数基本格式(三种)
第一种(最常用):
函数名(){
命令序列
}
第二种:
function 函数名 {
命令序列
}
第三种:
function func_name () {
...函数体...
}
4,注意事项
- 直接写 函数中调用函数 直接写函数名
- 同名函数 后一个生效
- 调用函数一定要先定义
- 每个函数是独立
5,函数例子
(二)查看函数
declare -r 看所有函数
declare -f 看所有函数详细情况
declare -f 跟函数名 看指定函数详细情况
(三)删除函数
unset 对应函数名
(四)函数的返回值return
1,含义
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
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,定义数组格式:
- 数组名=(value0 value1 value2 value3 ......)
- 数组名=([0]=value [1]=value1 [2]=value2 ....)
- 列表名="value0 value1 value2 value3 ...... "
数组名=($列表名) - 数组名[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数组值为