shell函数语法
脚本中使用函数
创建函数的格式,有两种:
function name {
commands
}
或
name() {
commands
}
2. 函数返回值
使用函数输出
3.在函数中使用变量
3.1 向函数传递参数
函数可以使用标准的参数环境变量来代表命令行上传给函数的参数,如,函数名会在$0变量中定义,函数命令行的任何参数都会通过$1, $2等定义。也可以用特殊变量$#来判断传给函数的参数数目 ,函数可以用参数环境变量获得参数值。
3.1.1 在脚本中调用函数时传递参数,必须将参数和函数放在同一行
在命令行中传递参数给脚本中的函数
3.2 在函数中处理变量
函数会用两种类型的变量:
A 全局变量
B 局部变量
3.2.1 全局变量
默认情况下,你在脚本中定义的任何变量都是全局变量,在函数外定义的变量可在函数内正常访问
3.2.2 局部变量
不用在函数中使用全局变量,函数内部使用的任何变量都可以被声明成局部变量。要那么做时,只要在变量声明的前面加上local关键字就可以了,也可以在给变量赋值时在赋值语句中使用local关键字,local关键字保证了变量只局限在该函数中,如果脚本中在该函数之外有同样的名字的变量,那么shell将会保证这两个变量的值是分离的。
数组
数组数组的作用以及意义与变量类似
变量:储存单个元素的内存空间。
数组:存储多个元素的连续的内存空间,相当于多个变量的集合
数组名和索引:
索引:编号从0开始,属于数值索引
注意:数组索引支持使用自定义格式,即为关联所索引,bash4.0版本之后开始支持
bash的数组支持稀疏格式(索引不连续)
声明数组:
declare -a ARRAY_NAME
declare -A ARRAY_NAME: 关联数组
注意:关联数组和一般数组之间不可相互转换
数组元素的赋值:
1.一次只赋值一个元素
ARRAY_NAME[INDEX]=VALUE
weekdays[0]="Sunday"
weekdays[4]="Thursday" #双引号可以不加,但是如果元素中含有空格需要双引号
2.一次赋值全部元素
ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
引用数组
引用数组元素:
${ARRAY_NAME[INDEX]}
注意:省略[INDEX]表示引用下标为0的元素
引用数组所有元素:
${ARRAY_NAME[*]}
${ARRAY_NAME[@]}
数组的长度(数组中元素的个数):
${#ARRAY_NAME[*]}
${#ARRAY_NAME[@]}
数组处理
引用数组中的元素
数组切片: ${ARRAY[@]:offset:number}
offset:要跳过的元素个数
number:要取出的元素个数
取偏移量之后的所有元素:
${ARRAU[@]:offset}
关联数组
declare -A ARRAY_NAME
ARRAY_NAME=([idx_name1]='val1' [idx_name2]='val2‘...)
注意:关联数组必须先声明再调用
例题
1生成十个随机数保存在数组中,并找出其最大值和最小值
2将下图所示,实现转置矩阵matrix.sh
1 2 3 1 4 7
4 5 6 ===> 2 5 8
7 8 9 3 6 9