今天介绍函数调用
我们在用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 |
多谢 |
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/