为了防止代码的大量雷同,把代码复制粘贴得到处都是,需要用一个东西把大量雷同的代码包装起来,这样在需要的时候,直接调用这个包装就好了,我们把这个包装叫 “函数”,而bash编程中也有函数。
1. 函数的定义
[function] 函数名()
{
执行语句
[return]
}
- []中的 表达式代表可以省略的,关键字function 和return 可以省略
下面看一下具体的例子:
#!/bin/bash
#输出当前用户名
show_user()
{
echo "当前登录的用户名为"
echo "$LOGNAME"
}
2. 函数的调用
2.1 不带参数的调用
如果是不带参数的调用,直接输入函数名调用就好了
showuser
2.2 带参数的调用
格式: 函数名 变量1 变量2
如将变量A和变量B传递给showuser函数:
showuser A B
注意:在函数内部的$1 $2代表的是执行函数时传入的位置参数,而不是在命令行中执行脚本时传入的参数
2.3 函数的返回值
- 在函数中遇到关键字return后函数就停止了,并且只能返回是十进制的0-256范围内的整数
- 可以指定return返回的值,如果不指定,则返回最后一条命令执行后的退出状态
- 返回值将保存在预定义的特殊变量$?中
2.4 删除函数
使用shell中的内置命令unset可以从内存中删除函数,具体格式如下:
unset - f 函数名
2.5 载入函数
函数可以直接放在命令行中,但是关闭终端之后,函数就失效了。也可以放在脚本文件中,通过"source" 或 " . "命令可以将他们运行到内存中
3. 函数的作用域
3.1 全局作用域
定义一个变量时,无论在函数的内外,只要没有使用关键字local进行特别声明的变量都具有全局作用域,全局作用域可以在程序的任何地方被访问。
脚本:
#!/bin/bash
#全局变量
A=我在函数外
afunction()
{
B=我在函数内
echo "我是变量 A, $A"
echo "我是变量 B, $B"
}
afunction
执行:
bash global_variable.sh
输出:
我是变量 A, 我在函数外
我是变量 B, 我在函数内
3.2 局部作用域
在函数内使用关键字local声明的变量称为局部变量,局部变量仅在函数内部(含嵌套函数)被访问
脚本:
#!/bin/bash
#局部变量
afunction()
{
local A=我是局部变量
echo $A
}
echo $A
afunction
执行:
bash local_variable
输出:
#可以看到程序中两次调用变量A,而这里只输出一次,在函数为无法调用局部标量
我是局部变量
注意:如果在函数内外定义了相同名称的变量,即全局作用域和局部作用域发生重叠时,按就近原则处理