函数

函数就是一个代码块,你可以在代码块中定义任意代码,然后在脚本中调用,使用函数名即可调用函数中定义的代码块。

语法

[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表示没有错误,其他任何值表明有错误。