• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

介绍几个shell程序设计小知识之六

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 21次 | 进入软件测试论坛讨论

领测软件测试网
今天介绍函数调用

我们在用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/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网