一、函数
1.1 函数的定义
函数是脚本的别名
作用:函数可以避免代码重复,可读性强,可以简化脚本。
格式:
函数名(){
脚本
}
1.2 如何使用函数
1.定义
2.调用
函数一定要先定义再使用
例子:
错误示例
正确示例
1.3 函数文件
专门存放函数的文件
要使用的时候
. 或者绝对路径的文件名 放在脚本的最前面
1.4 函数变量的作用范围
用法:加local 关键字(加locao只会在函数内部生效,不影响外界环境)
1.5 函数的返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
使用原则:
-
函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
-
退出码必须是0-255,超出的值将为除以256取余
例子
1.6 函数的传递参数
1.7 函数的递归
实际应用就是阶乘
实验:
#!/bin/bash
fact () {
if [ $1 -eq 1 ]
then
echo 1
else
echo $[ $1 * `fact $[$1-1]` ] //如果输入的数不是1那么就用这个数乘以他本身减去一,如此循环,直到1
fi
}
fact $1
二、数组
2.1 数组的类别
数组分为普通数组和关联数组
普通数组:下标是数字关联数组:下标是与含义的字符串
declare -a 数组名
#普通数组可以不事先声明,直接使用
declare -A 数组名
#关联数组必须先声明,再使用
2.2 声明数组
1.数组名=(数组值,中间用空格隔开)
2.数组名[下表1]=数值1
例子:
普通数组
关联数组
2.3 删除数组
普通数组
关联数组
2.4 数组切片
格式
${数组名[@]:跳过个数:要取个数}
2.5 进阶:冒泡排序
提出问题:假如我有一个随机数的数组我想让他从小到大排列,该怎么做
#!/bin/bash
for i in {0..9}
do
a[$i]=$RANDOM
done
echo "原始数组为: ${a[*]}"
#随机生成一个数组
l=${#a[*]}
#定义l的长度为数组a 10
for ((i=1;i<$l;i++))
#比较的轮数
do
for ((j=0;j<$l-$i;j++))
#两个相邻的数需要比较的轮数
do
first=${a[$j]}
#数组的第一个数
k=$[$j+1]
#计算下一个数的角标
second=${a[$k]}
#数组的第二个数
if [ $first -gt $second ]
then
temp=$first
a[$j]=$second
a[$k]=$temp
fi
done
done
echo "排序后的数组为: ${a[@]}"
总结:
1. 注意在函数内传递参数与通过位置变量在函数外传递参数的区别(函数传递由脚本变量的位置决定)。
2. 注意函数中局部变量和全局变量的区别。
3.在接收位置变量的值时,建议给出一个新定义的变量,以增加代码的可读性。
4.对递归函数的理解是对函数的深入运用和挖掘,尤其是递归方面的运用。
5.注意需要保持函数的脚本形式也可以在文件中构建函数库,另外调用文件的第一条语句要调用源代码或". "。
6. 如何构建数组(我们可以将其视为包含多个独立元素的变量集合)。