Shell编程经验总结之―代码重用篇
时间:2005-11-16 来源:xwfang
在其他语言中的代码重用的方法大家应该都很熟悉了,我就不在此献丑了。在shell编程中我想大多数人是不熟悉的(如果很熟就当我没说J)。一般情况如果想使用别人的一段代码,或者一个函数(或者直接使用脚本),目前可能大多数人都会直接拷贝源代码到自己的脚本中。这样有什么坏处我就不说了。其实我们在编写脚本时只要简单的改变一下编程习惯就能很容易的让你的程序被大家使用,不再废话,直接看下面的代码。
###############################################################################
#这是一个简单判断用户输入的字符串是否是ip地址的函数,如果你写脚本会在乎健壮性和#安全性的话,应该会对对用户输入的ip参数进行有效性判断,所以应该会经常用到。
###############################################################################
is_ip()
{
if [ $# -ne 1 ]
then
{
echo "Usage:$0 string"
return 1
}
fi
typeset ip=$1
#判断是否是以 . 作为分割的四个字段,并且每个字段都是 0-255 之间的数,我们即认为是 ip 地址。
typeset ipflag
ipflag=`echo ${ip} | awk -F. '{ if ( NF==4 && ( $1 >= 0 && $1 < 256 ) && ( $2 >= 0 && $2 < 256 ) && ( $3 >= 0 && $3 < 256 ) && ( $4 >= 0 && $4 < 256 ) ) print "ok" }'`
#是 ip 返回 0
if [ "-${ipflag}" = "-ok" ]
then
{
return 0
}
fi
return 1
}
然后保存到tool.inc文件中(inc是我自己的习惯而定的后缀名,大家不喜欢可以随便叫J)
然后在自己的脚本中用.即可把此程序引入进来。
My.sh
#!/bin/bash
main()
{
typeset userip=$1
is_ip ${userip}
if [ $? –ne 0 ]
{
echo “invalid ip address ${userip}”
return 1
}
fi
# do my other process
return 0
}
#引入需要用到的函数, 此处也可以使用相对路径
. /home/away/common/tools.inc
#执行主函数
main “$@”
exit $?
这样实现的好处其他的我就不多说,只说一两个,这样的重用是进程内的重用,不像直接使用别人的脚本,是进程外的(因为每次使用都要生产一个进程,会需要很多开销的)。如果一个for循环少一点一千次,这个性能影响会很大,并且被调用的是个脚本,进程id($$)是一直变的,也不好跟踪。
第二个好处就是实现简单的shell编程的函数重定义和跨平台,具体方法,因为时间关系以后再详细描述