6.6 函数和参数传递
目录
函数和参数传递
本节我们来学习 bash shell 编程的第六部分参数传递与函数,包括以下内容:
- 如何向脚本传递参数
- bash 函数
- 局部作用域
1. 参数传递
1.1 位置参数
所谓位置参数是 bash 中,脚本或函数接收参数的形式,除了位置参数,脚本中还内置了一些特殊参数,用于保存特定的值。参数的对应关系如下所示
myscript.sh argu1 argu2....
- 位置参数:
$1
: 表示第一个位置参数 argu1$2
: 表示第二个位置参数 argu2${10}
:表示第 10 个位置参数 argu10${11}
:表示第 11 个位置参数 argu10,其他以此类推
- 特殊变量:
$0
:脚本文件路径本身;$#
:脚本参数的个数;$*
:由空格分隔的所有参数的字符串 “$1 $2 $n”$@
:所有参数组成的列表 “$1”,"$2","$3","$n"
1.2 参数轮替
shift [n]
- 作用:造成参数变量的号码偏移,即整体参数的右移
- n:数字,默认为1,代表拿掉最前面几个参数的意思
2. 函数
2.1 bash 函数特性
函数是主要作用是实现代码重用,其在每次被调用时创建,返回时终止。bash 中的函数与 bash 脚本的使用方式基本是类似的。
函数的返回值
函数的返回值也包括执行结果返回值和状态返回值
- 函数的执行结果返回值为代码的输出包括
- 函数中的打印语句:echo, print
- 函数中调用的系统命令执行后返回的结果
- 执行状态返回值:
- 默认是函数体中最后一次执行的命令状态结果
- 使用
return [0-255]
自定函数执行状态的返回值,不能使用 exit, exit 会直接退出脚本
函数参数
函数也通过位置接收传递进来的参数,并且表示方法与脚本完全相同。因此函数内的 $n
参数并不是脚本中的 $n
参数。向函数传递参数时,在函数名后跟空白分隔参数列表即可,testfunc arg1 arg2 arg3 ...
函数作用域
bash 函数默认与脚本共享同一作用域,函数内可以直接访问和修改脚本内变量的值。要想创建局部变量必需使用 local VARIABLE=VALUE
。因此 bash 中的变量有三种:
- 局部变量:作用域是函数内;在函数结束时被自动销毁,因此不会影响脚本内同名变量的值
- 本地变量:作用域是当前shell脚本程序文件,在运行脚本的shell进程结束时被销毁
- 环境变量:作用域是当前进程及其子进程
因为函数内能直接修改脚本内变量的值,所以函数最好都使用局部变量,以免函数调用非预期的更改脚本内变量的值,引入难以调试的 bug。
2.2 定义语法:
|
|
3. 函数使用示例
|
|