linux shell 腳本入門
第2部分 實例
現(xiàn)在我們來討論編寫一個腳本的一般步驟。任何優(yōu)秀的腳本都應(yīng)該具有幫助和輸入?yún)?shù)。并且寫一個偽腳本(framework.sh),該腳本包含了大多數(shù)腳本都需要的框架結(jié)構(gòu),是一個非常不錯的主意。這時候,在寫一個新的腳本時我們只需要執(zhí)行一下copy命令:
cp framework.sh myscript
然后再插入自己的函數(shù)。
讓我們再看兩個例子:
二進(jìn)制到十進(jìn)制的轉(zhuǎn)換
腳本 b2d 將二進(jìn)制數(shù) (比如 1101) 轉(zhuǎn)換為相應(yīng)的十進(jìn)制數(shù)。這也是一個用expr命令進(jìn)行數(shù)學(xué)運算的例子:
#!/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
該腳本使用的算法是利用十進(jìn)制和二進(jìn)制數(shù)權(quán)值 (1,2,4,8,16,..),比如二進(jìn)制10可
以這樣轉(zhuǎn)換成十進(jìn)制:
0 * 1 + 1 * 2 = 2
為了得到單個的二進(jìn)制數(shù)我們是用了lastchar 函數(shù)。該函數(shù)使用wc –c計算字符個數(shù),
然后使用cut命令取出末尾一個字符。Chop函數(shù)的功能則是移除最后一個字符。
評論