linux shell 脚本入门
第2部分 实例
现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意。这时候,在写一个新的脚本时我们只需要执行一下copy命令:
cp framework.sh myscript
然后再插入自己的函数。
让我们再看两个例子:
二进制到十进制的转换
脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子:
#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
cat
b2h -- convert binary to decimal
USAGE: b2h [-h] binarynum
OPTIONS: -h help text
EXAMPLE: b2h 111010
will return 58
HELP
exit 0
}
error()
{
# print an error and exit
echo $1
exit 1
}
lastchar()
{
# return the last character of a string in $rval
if [ -z $1 ]; then
# empty string
rval=
return
fi
# wc puts some space behind the output this is why we need sed:
numofchar=`echo -n $1 | wc -c | sed s/ //g `
# now cut out the last char
rval=`echo -n $1 | cut -b $numofchar`
}
chop()
{
# remove the last character in string and return it in $rval
if [ -z $1 ]; then
# empty string
rval=
return
fi
# wc puts some space behind the output this is why we need sed:
numofchar=`echo -n $1 | wc -c | sed s/ //g `
if [ $numofchar = 1 ]; then
# only one char in string
rval=
return
fi
numofcharminus1=`expr $numofchar - 1`
# now cut all but the last char:
rval=`echo -n $1 | cut -b 0-${numofcharminus1}`
}
while [ -n $1 ]; do
case $1 in
-h) help;shift 1;; # function help is called
--) shift;break;; # end of options
-*) error error: no such option $1. -h for help;;
*) break;;
esac
done
# The main program
sum=0
weight=1
# one arg must be given:
[ -z $1 ] help
binnum=$1
binnumorig=$1
while [ -n $binnum ]; do
lastchar $binnum
if [ $rval = 1 ]; then
sum=`expr $weight + $sum`
fi
# remove the last position in $binnum
chop $binnum
binnum=$rval
weight=`expr $weight * 2`
done
echo binary $binnumorig is decimal $sum
该脚本使用的算法是利用十进制和二进制数权值 (1,2,4,8,16,..),比如二进制10可
以这样转换成十进制:
0 * 1 + 1 * 2 = 2
为了得到单个的二进制数我们是用了lastchar 函数。该函数使用wc –c计算字符个数,
然后使用cut命令取出末尾一个字符。Chop函数的功能则是移除最后一个字符。
评论