前言
哪个语言标准,没有函数呢?我还真没找到,函数反复调用,减少重复代码,我们一起学习shell编程中的函数,包括创建函数、删除函数、函数中定义变量、函数的返回值(退出状态码)、函数中的参数处理、函数调用……
创建函数
两个标准的创建函数语法,习惯哪个用哪个!
1、直接定义
函数名(){
……函数体……
}
print_name(){
echo "wang yuan wai"
}
2、function关键字
多加了一个function关键字,在没有类的shell编程中,以后加入面向对象看来也是有可能的……
function print_name(){
echo "wang yuan wai"
}
函数调用
直接写函数名即为函数调用
注意:函数名后面没有括号,那参数怎么传递呢?继续往下看!
function print_name(){
echo "wang yuan wai"
}
print_name
参数处理
1、参数接收
特殊变量1表示第一个参数、特殊变量2表示第二个参数,第几个参数就用数字x代替
function print_name(){
name=$1
age=$2
echo ${name} ${age}
}
print_name "wang yuan wai" "34"
2、参数传递
空格字符隔开,即为向函数传递参数
print_name "wang yuan wai" "34"
3、 所有参数
$*或者$@(作者喜欢用*与@代表所有参数)
4、参数个数
#在函数中表示传入函数中的参数个数
function print_name(){
name=$1
echo $#
}
全局变量与局部变量
1、全局变量(坑)
函数中定义的变量,默认为全局变量,在整个shell脚本程序中均可访问
function print_name(){
name="wang yuan wai"
echo ${name}
}
2、局部变量
局部变量,使用local定义
function print_name(){
local name="wang yuan wai"
echo ${name}
}
局部变量作用域
必须纠结作用域,整个函数内都能访问局部变量
function print_name(){
if true;then
local name="wang yuan wai"
fi
echo ${name}
}
函数返回值(退出状态码)
1、return不填写数字时,默认返回最后一个命令的退出状态码
function print_name(){
local name="wang yuan wai"
return
}
2、指定退出状态码并返回
function print_name(){
name="wang yuan wai"
return 0
}
3、未填写return,默认为最后一条命令的退出状态码
function print_name(){
name="wang yuan wai"
echo ${name}
}
4、记住:函数函数的return只能返回退出状态码,那么如果先返回一个值怎么办?请继续往后看
命令替换模拟函数返回值
#!/bin/bash
function print_name(){
echo "wang yuan wai"
}
my_name=$(print_name)
echo $my_name
中止函数执行
同样使用return,将导致后续程序不会再继续执行
function print_name(){
name="wang yuan wai"
if true;then
return
fi
echo ${name}
}
同名冲突
别名、函数、外部脚本程序名称相同时,bash解释器的处理方案
1、别名优先级最高
2、函数优先级次高
3、外部脚本程序最低
总结
1、shell编程中的参数处理规范比较个性,这个值得注意一下
2、函数中的返回值只能返回退出状态码
3、函数中直接定义的变量为全局变量,这个太坑……