# 函数 函数就是一个代码块,你可以在代码块中定义任意代码,然后在脚本中调用,使用函数名即可调用函数中定义的代码块。 ## 语法 ``` [function] 函数名() { # 函数代码块 } ``` > - 函数名可以任意指定,但推荐使用驼峰命名法。 > - `[]`中的内容是可选的,可以省略。 > - 函数一定要写在调用函数之前,不然会报错。建议将函数写在脚本开头。 基本用法 ``` #!/bin/bash # 定义函数 hello() { echo "Hello, World!" } hello # 调用函数 ``` 运行效果 ``` [root@lwz1 ~]# sh fun.sh Hello, World! ``` ## 数值求和,并使用return返回值 ``` #!/bin/bash # 定义函数 fun() { read -p "请输入一个数字:" num1 read -p "请输入另一个数字:" num2 return $(($num1 + $num2)) } fun echo "两个数字的和是:$?" ``` > - `$?`用于调用`return`返回的值。 > - `$(($num1 + $num2))`也可以使用`$[$num1 + $num2]`表示。 运行效果 ``` [root@lwz1 ~]# sh fun1.sh 请输入一个数字:3 请输入另一个数字:3 两个数字的和是:6 ``` ## 函数参数 ``` #!/bin/bash # 定义函数 fun() { echo "第一个参数是:$1" echo "第二个参数是:$2" echo "第三个参数是:$3" echo "第十个参数是: $10" echo "第十个参数是: ${10}" echo "第十一个参数是: ${11}" echo "参数个数是: $#" echo "以一个单字符输出所有参数:$*" } fun 1 2 3 4 5 6 7 8 9 34 789 ``` > - `$10`不能获取第十个参数,当参数个数n>=10时,需要使用`${n}`来获取。 > - 函数参数的个数是不固定的,可以接收任意个数的参数。 运行效果 ``` [root@lwz1 ~]# sh fun1.sh 第一个参数是:1 第二个参数是:2 第三个参数是:3 第十个参数是: 10 第十个参数是: 34 第十一个参数是: 789 参数个数是: 11 以一个单字符输出所有参数:1 2 3 4 5 6 7 8 9 34 789 ``` 另外还有几个特殊字符用来处理参数: |参数处理|说明| |:---:|:---:| |`$#`|传递到脚本的参数个数| |`$*`|以一个单字符串显示所有向脚本传递的参数| |`$$`|脚本运行的当前进程ID号| |`$!`|后台运行的最后一个进程的ID号| |`$@`|与`$*`相同,但是使用时加引号,并在引号中返回每个参数。| |`$-`|显示Shell使用的当前选项,与set命令功能相同。| |`$?`|显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。|