转载地址:https://www.cnblogs.com/oxspirt/p/7246075.html
“sum=$(fsum 2 5)”这种方式,是将标准输出(echo 出来的东子)传递给主程序的变量,而不是返回值!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/bin/bash
function
sum(){
val1=
$1
val2=
$2
val3=$((
$1
+
$2
))
echo
$val3
}
#Call
function
with 2 parameters
and
it
return
1 parameter.
ret_val=$(sum 10 20)
echo
$ret_val
|
脚本执行结果: ret_val = $(sum 10 20) 将sum 10 20 的输出传递给变量ret_val
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/bash
prod=1
twoPow(){
for
((i=0;i<
$1
;i++));
do
prod=$((
$prod
*2))
done
}
echo
"Enter a number"
read num
twoPow
$num
echo
$prod
|
执行脚本 c.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/bin/bash
twoPow()
{
prod=1
for
((i=0;i<
$1
;i++));
do
prod=$((
$prod
*2))
done
return
$prod
}
echo
"Enter a number"
read num
twoPow num
|
----------------------------------------------------------------------------------------------------------------------------------
Shell的函数在使用之前必须先定义,定义格式:
1
2
3
4
5
|
[ function ] funname [()]
{
action;
[
return
int
;]
}
|
- 可以带function fun()定义,也可以直接fun() 定义,不带任何参数。
- 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
示例
1
2
3
4
5
6
7
8
9
10
|
fsum
2
5
fsum(){
echo $
1
,$
2
return
$
1
+$
2
}
sum=$(fsum
2
5
)
echo $?
echo
"sum=$sum"
|
执行输出:
fsum: not found
7
sum=2,5
从上面这个例子我们可以得到几点结论:
- 必须在调用函数地方之前,声明函数,shell脚本是逐行运行,这点和编译型语言不通。
- 函数返回值,只能通过$? 系统变量获得,而“sum=$(fsum 2 5)”这种方式,是将标准输出传递给主程序的变量,而不是返回值!
Shell函数可以在脚本文件中使用之前定义它,也可以把函数定义在一个独立的文件使用点号(.)命令来引用它。如function.sh和testshell.sh在同一目录中,function.sh
1
2
3
4
|
fsum(){
echo $
1
,$
2
return
$(($
1
+$
2
))
}
|
testshell.sh
1
2
3
|
#! /bin/sh
. ./function.sh
fsum
2
5
|