定义
function 函数名()
{
函数体
}
调用
无参数的时候 函数名就是调用
有参数的时候 函数名 参数1 参数2 参数3 ...
1.shell中的函数定义时没有形参列表
2.shell中函数定义时没有返回值
3.shell中的函数使用function标识的
4.函数名的命名规则,和C一样
5.如果函数不调用,函数体是不执行的
函数传参:
函数名 参数1 参数2 参数3 ...
在函数内部用 位置变量 来获取调用时的参数
$0 //表示脚本名 不同的执行方式 $0 不一样
$1 $2 ... $n //表示调用时的第几个参数
$@ $* //表示调用时的所有参数
$# //表示调用时参数的个数
当把命令行所有参数都传递给函数时
$@ $* "$@" //原封不动的把命令行的参数传递给函数
"$*" //将命令行的所有参数作为一个整体,传递给函数,
//在函数中,用$1就代表命令行的所有参数了
function my_func()
{
echo $0
echo "hello world"
echo $1
echo $2
echo $*
echo $@
echo $#
}
my_func $@
echo "-----------------"
my_func $*
echo "-----------------"
my_func "$@"
echo "-----------------"
my_func "$*"
获取函数返回值的方式:
1.shell中的变量默认都是全局可访问的,所以可以直接用全局变量的方式获取函数的返回值
function my_func()
{
RET=$(($1 + $2))
}
my_func 100 200
echo $RET
2.可以用 return 的方式返回函数的结果
用 $? 去获取
这种方式有个限制 只能返回 [0-255] 之间的值
function my_func()
{
RET=$(($1 + $2))
return $RET
}
my_func 100 155
echo $?
3.用echo的方式返回函数的结果
调用处用 命令置换符 `` $() 去获取
用这种方式 如果函数中有多个 echo 那返回的就是多次echo的结果
function my_func()
{
RET=$(($1 + $2))
echo $RET
echo "1000"
}
VAR=`my_func 1000 1570`
echo $VAR
练习:
封装一个对数组成员求和的函数 并返回函数的结果。
要求数组成员 命令行 read 输入
function my_func()
{
SUM=0
for i in $1
do
((SUM+=$i))
done
echo $SUM
}
read -a ARR
RET=`my_func "${ARR[*]}"`
echo $RET