概念
和其他编程语言一样,函数作为一种封装代码块,以提高代码复用性和可维护性的存在。
记住一点,先定义,再使用
定义
shell 函数的创建方式
function 和 () 二选一
- function 函数名 空格{
xxxx
return 返回码(0-255)(不指定时,以函数内最后一条命令的返回码返回,一般来讲0代表成功,其他错误代表各种异常,根据实际情况设计返回码)
} - 函数名 () 空格{
xxx
return 返回码(0-255)
}
调用函数
调用函数直接写函数名称即可,不要写(),如果有参数,直接写在函数名后面,多个参数以空格隔开(和脚本传参类似)。
脚本及函数返回值
如果 函数/脚本 明确指定了 return ,则以return 的值返回;否则以最后一句命令执行结果返回。
return 的值,只能为[0-255]的值。
如果想要返回其他值,可以间接利用 echo 定义变量的方式,但是要注意,函数内只能有一个echo,否则会最终结果会拼接在一起
语法类似
function my_function1() {
xxxxx
echo result
}
result=my_function1
#!/bin/bash
add()
{
echo $[$1 + $2]
}
res=`add $1 $2`
echo "最终返回结果"$res
系统函数
- basename
获取脚本名称,还可以去掉脚本后缀
基本语法
basename script [suffix:去掉指定后缀,不加时,展示完整文件名]
# 保留后缀
basename /opt/test.sh
test.sh
#去掉后缀
basename /opt/test.sh .sh
test
- dirname
从文件绝对路径中提取目录。
参数没有 / 时,返回 .
基本语法
dirname absolute_path
[root@test-centos sh]# dirname x.sh
.
[root@test-centos sh]# dirname /opt/test/sh/x.sh
/opt/test/sh
综合脚本
#!/bin/bash
function f1 {
echo "调用了f1..."
echo "函数的参数:" $1
return 0
}
f1 1111
if [[ $? -eq 0 ]]
then
echo "f1 执行成功"
else
echo "f1 执行失败"
fi
echo "脚本的参数:" $1
f2() {
echo "调用了f2..."
echo "函数f2 的参数:" $1
return 9
}
f2 222
if [[ $? -eq 0 ]]
then
echo "f2 执行成功"
else
echo "f2 执行失败"
fi
执行脚本
bash function1.sh 9
调用了f1...
函数的参数: 1111
f1 执行成功
脚本的参数: 9
调用了f2...
函数f2 的参数: 222
f2 执行失败