命令序列按照格式写在一起 核心:财富使用的命令序列
使用函数可以避免代码重复,函数可以将大的工程分割成若干小的功能模块,提高代码的可读性
第一种写法
第二种写法
return:表示退出函数并返回一个退出值,用$?可以显示这个值,return一般会写在函数最后一行
退出值是有范围的:0—255,超过255会除以256再取余
shell脚本中return的返回值默认就是0,或者非0的返回码,在shell脚本中意义不大,主要是作为判断return
作用在函数内部,在shell中return一般就是判断函数的执行情况。
exit:作用于整个脚本,立即终止,没有返回码,脚本会立刻停止运行
exit 0 :表示程序正常结束 exit 1 :程序是异常退出的
$?:在shell脚本中就是exit 0
函数传参:在shell中,调用函数可以传递参数,位置变量来传参,我们在函数内部可以定义位置变量。
在花括号内就是在函数内。在花括号外就是在函数外
例:求两数之和
函数变量的作用范围:函数在shell中仅在当前的shell环境中有效
在函数中定义的变量默认地全局变量
加了local就变成了函数的內部变量,只能在函数的内部使用,外部如果重新传值它的值就会发生变化
在函数中不加local就是让a,b作为全局变量
要让函数内部的变量作用于整个脚本,那就不用加local
如果要在外面二次进行传参,那么函数内部的值就要加上local让他变成一个内部变量
例:
调用函数第一次传进去的值是9 ( echo "inside" $i )
调用的是整个函数中写的方法
local i
i=8
echo "inside $i" 使得第二和输出的数为8
经过i++自增后 最后输出的为10
递归函数:函数调用自己本身的函数,
例:用函数递归的方式,写一个阶乘,要求阶乘数可以自定义
以求6的阶乘为例,6被调用到函数的命令序列当中,先判断是否为1,6不为1执行else,6在函数内部执行减1(temp)并且和6再相乘,并且函数重复执行,直到最后值为1
local result=$(abc $temp) 意思为 abc调用 local temp=$(($1-1)) 中得到的数,得到的数进入函数的命令序列 并且每次减一都调用一次循环执行直到最后得到的值为1不再进行判断,最后把累乘的结果打印出来
例:函数调用自己,打印出自定义目录下所有的目录和文件 /opt目录下