一、一个简单shell函数
#!/bin/bash
function SayHi()
{
echo “Hello World”
}
SayHi
输出结果:Hello World
这里需要注意:
所有函数必须在使用前定义;调用函数仅使用其函数名即可。
那么,shell函数能否类似python那样,实现传参和返回结果呢?
自然是可以的。
二、shell函数传参
在shell中调用函数可以向其传递参数;
在shell函数体内部,通过 $n 来接收参数值。
比如:
#!/bin/bash
function SayHi()
{
OneSay=$1
TwoSay=$2
TenSay=${10}
echo $OneSay
echo $TwoSay
echo $TenSay
}
SayHi “Hello One” “Hello Two” 3 4 5 6 7 8 9 "Hello Ten" 11
输出结果:
Hello One
Hello Two
Hello Ten
这里有两个注意点:
1、当传给函数的参数是一段文本的时候,建议用双引号引起来,否则会出现截断。比如:
SayHi “Hello One”
#或者
One=“Hello One”; SayHi “$One”
2、$10并不能获取第十个参数,需要用 ${10};
事实上,当 $n 的 n>=10 时,都需要通过 ${n} 来获取参数。
三、shell函数返回结果
#!/bin/bash
function SayHi()
{
OneSay=$1
TwoSay=$2
TheSay=$3
ForSay=$4
FiveSay=$5
SixSay=$6
SevSay=$7
EigSay=$8
NinSay=$9
TenSay=${10}
echo $OneSay
echo $TwoSay
echo $TenSay
return $(($TheSay+$ForSay+$FiveSay+$SixSay+$SevSay+$EigSay+$NinSay))
}
SayHi “Hello One” “Hello Two” 3 4 5 6 7 8 9 "Hello Ten"
echo "The sum of the numbers passed : $? "
输出结果:
Hello One
Hello Two
Hello Ten
The sum of the numbers passed :42
由上可知:shell函数的返回值,在调用该函数后通过 $? 来获取。
这里有个注意点:shell中的 $? ,仅仅对其上一个函数指令的返回负责。
一旦上一个函数返回后,
没有获取返回值而执行了其他逻辑的话,
那么,其返回值将不能再通过 $? 获得,
此时 $? 只是显示最后命令的退出状态: 0表示运行正常,其他任何值表明出错。
举个简单例子说明:
#!/bin/bash
function SayHi()
{
OneSay=$1
TwoSay=$2
return $(($OneSay+$TwoSay))
}
SayHi 1 2
echo "The sum of the numbers passed : $? "
echo $?
输出结果:
The sum of the numbers passed :3
0