今天介绍函数调用
我们在用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 |
| 多谢 |
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



