今天介绍函数调用

我们在用shell做程式时,假如语句很多或处理问题很复杂时,把语句都写在一起显得有些乱
也不容易读,或有重复工作我们要写重复的语句, 这样即增加了程式的长度也增加了程式可
阅读性和工作量.这种情况我们能够把语句分成块来写, 即一项工作写在一个函数里, 然后
在程式中调用这些函数就可完成指定的工作.

关于函数格式:

函数名()
{
语句
}

shell中的函数和C语言中的函数很相似 ,函数名能够任意起但不要和shell种的关键字相同.

在调用这些函数时直接写函数名就能够.

下面给出一个例子

例一:
show()
{
echo "本程式是根据输入的两个整数来计算两个整数的积"
echo "请输入两个整数, 'q'退出:\c"
}

error()
{
echo "错误!!"
}


while true
do
show
read aa bb
if [ "x$aa" = "xq" ]
then
exit 0
elif [ "x$aa" = "x" -o "x$bb" = "x" ]
then
error
continue
else
echo `expr $aa \* $bb`
fi

done

上例是显示输入的两个整数积.
这只是个简单的例子, 主要是介绍函数的调用方法, 在这个例子中函数的作用并没有真正
起到函数的作用,不用函数直接将这两个函数中的语句放在调用处也是相同的.

下面再给出个例子,在介绍例子前先介绍一下函数调用的参数传递问题.
在shell中的函数传递参数和C语言中是有区别的,C语言中的形参也要和和实参一一对应列出
而shell中不用一一列出,大家会问不用一一列那怎么引用呀?
在shell中的被调用函数在引用参数时是用$1,$2....等来引用传递过来的参数,$1引用
的就是传递过来的第一个参数,$2就是第二个参数,以此类推.下面举例说明.

例二:
show()
{
echo $1$2$3$4$5
}

error()
{
echo "错误!!"
}


while true
do
echo "本程式是根据输入的两个整数来计算两个整数的积"
echo "请输入两个整数, 'q'退出:\c"
read aa bb
if [ "x$aa" = "xq" ]
then
exit 0
elif [ "x$aa" = "x" -o "x$bb" = "x" ]
then
error
continue
else
show $aa "*" $bb "=" `expr $aa \* $bb`
fi

done

例三:

Expr()
{
if [ $2 = "^" ]
then
return `expr $1 \* $3`
else
return `expr $1 $2 $3`
fi
}



while true
do
echo "本程式是根据输入的两个整数来计算两个整数的和 差 积 商"
echo "格式:整数1 符号 整数2 乘号用^代替"
echo
echo "请输入两个整数, 'q'退出:\c"
read aa f bb
if [ "x$aa" = "xq" ]
then
exit 0
elif [ "x$aa" = "x" -o "x$bb" = "x" ]
then
echo "错误!!"
continue
elif [ $f = " " -o $f = "-" -o $f = "^" -o $f = "/" ]
then
echo
Expr $aa $f $bb
echo $?
echo
else
echo "符号错误!!"
fi
done

以上每个例子的文档名大家自己起, 每个参数用空格分隔,比如例三我们将程式保存在a.sh
中,在计算两个数的加法时要这样输入:
a.sh 23 45

另一求学者 回复于:2004-06-03 09:07:35
谢谢楼主,顶!

hsgzr 回复于:2004-06-03 21:06:15
看来在这个论坛介绍shell已没有必要了 那么这就是最后一篇吧

sdccf 回复于:2004-06-03 21:35:55
请继续,谢谢!

一涂 回复于:2004-06-04 11:05:09
感谢感谢,

hsgzr 回复于:2004-06-04 12:04:39
谢谢诸位弟兄的支持 只要能给您带来帮助 就是我的心愿

yyh 回复于:2004-06-04 12:13:58
好贴一定要顶!
谢谢搂住

yangbo9229 回复于:2004-06-05 20:35:11
楼主,这太少了点,有没有更难一点的

绣林 回复于:2004-06-05 21:36:18
只能站在旁边道声辛苦了!

secson 回复于:2004-06-06 22:05:23
感谢楼主!

hsgzr 回复于:2004-06-06 22:23:22
yangbo9229说:
楼主,这太少了点,有没有更难一点的

这是之六 前面已发了5篇 正在由渐到难 后面更有 

scyibin 回复于:2004-06-07 16:48:47
多谢