一、函数:function
1.function概念
function是一种过程式编程,目的在于代码重用,是一种模块化编程、结构化编程编程方式
函数:把一段独立功能的代码当作一个整体,并为之一个名字;命名的代码段
注意:
1) 定义函数的代码段不会自动执行,在调用时执行;所谓调用函数,在代码中给定函数名即可;
2) 函数名出现的任何位置,在代码执行时,都会被自动替换为函数代码;
2.语法
语法一:
function FUNCTION_NAME {
...函数体...
}
语法二:
FUNCTION_NAME() {
...函数体...
}
3.函数的生命周期:每次被调用时创建,返回时终止;
其状态返回结果为函数体中运行的最后一条命令的状态结果;
自定义状态返回值,需要使用:return
return[0-255]
0:成功
1-255:失败
4.函数返回值:
(1)函数的执行结果返回值:
1)使用echo或printf命令进行输出;
2)函数体中调用的命令的执行结果;
(2)函数的退出状态码:
1)默认取决于函数体中执行的最后一条命令的退出状态码;
2)自定义:return
5.传递参数给函数:
$1,$2, ...:引用传递给函数的参数;
$*或[email protected]:引用所有参数
$#:引用传递的参数的个数;
在调用函数时,在函数名后面以空白符分隔给定参数列表即可,例如,testfunc arg1 arg2 arg3 …
6.函数变量作用域
局部变量:作用域是函数的生命周期;在函数结束时被自动销毁;
定义局部变量的方法:localVARIABLE=VALUE
本地变量:作用域是运行脚本的shell进程的生命周期;因此,其作用范围为当前shell脚本程序文件;
7.函数递归:
函数直接或间接调用自身;
二、数组:ARRAY
1.数组:
变量是存储单个元素的内存空间;数组是存储多个元素的连续的内存空间;
格式:数组名[索引]
数组名:整个数组只有一个名字;
数组索引:编号从0开始;
引用方法:${ARRAY_NAME[INDEX]}
注意:
1)引用数组时只给数组名,表示引用下标为0的元素;
2)关联数组:bash-4及之后的版本,支持自定义索引格式,而不仅仅是0,1,2,...数字格式
2.声明数组:
declare -a NAME:声明索引数组;
declare -A NAME:声明关联数组;
3.数组中元素的赋值方式
(1) 一次只赋值一个元素:ARRAY_NAME[INDEX]=value
(2) 一次赋值全部元素:ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
(3) 只赋值特定元素:ARRAY_NAME=([0]="VAL1" [3]="VAL4" ...)
注意:bash支持稀疏格式的数组;
(4)交互式读取赋值: read -a ARRAY_NAME
4.数组的长度(数组中元素的个数):
${#ARRAY_NAME[*]}
${#ARRAY_NAME[@]}
5.引用数组中的所有元素:
${ARRAY_NAME[*]}
${ARRAY_NAME[@]}
6.数组元素切片: ${ARRAY_NAME[@]:offset:number}
offset:要路过的元素个数;
number:要取出的元素个数;省略number时,表示取偏移量之后的所有元素;
7.向非稀疏格式数组中追加元素:
ARRAY_NAME[${#ARRAY_NAME[*]}]=
8.删除数组中的某元素:
unset ARRAY[INDEX]
9.关联数组:
declare -A ARRAY_NAME
ARRAY_NAME=([index_name1]="value1" [index_name2]="value2" ...)