shell脚本总结12:自定义函数
目录
- 前言
- 正文
前言
shell 是一种脚本语言。脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言)。
正文
这一节我们介绍shell中的自定义函数。
函数定义的格式:以下三种都可以
函数名() {命令
}function 函数名() {命令
}function 函数名 {命令
}
假如我们现在有一个简答的需求:设计一个函数,计算两数字之和并输出,我们先看一个错误示例。
function get_sum() {
echo "$1和$2"
return $(($1 + $2))
}
total=$(get_sum 3 5)
echo "$total"
输出结果:
3和5
结果并没有我们希望看到的8,为什么呢?
因为在Shell中,函数的返回值是通过return返回的状态码,而通过命令替换 ( . . . ) 捕获的是函数的标准输出。所以这里的 t o t a l 变量实际上会得到 e c h o 输出的“ 3 和 5 ”,而 r e t u r n 的值则被存储在 (...)捕获的是函数的标准输出。所以这里的total变量实际上会得到echo输出的“3和5”,而return的值则被存储在 (...)捕获的是函数的标准输出。所以这里的total变量实际上会得到echo输出的“3和5”,而return的值则被存储在?中,但不会被赋值给total。
下面示范正确的范例。
正确示例1:
function get_sum_new() {
echo "$1和$2"
echo "$(($1 + $2))"
}total=$(get_sum_new 3 5)
echo "$total"
结果如下
3和5
8
正确示例2:
function get_sum1()
{s=$[ $1 + $2 ]echo "$s"
}
get_sum1 3 5
结果如下
8
正确示例3:
function get_sum2()
{s=$[ $1 + $2 ]return "$s"
}
get_sum2 3 5
echo "$?"
结果如下
8