詳細(xì)介紹Linux shell腳本基礎(chǔ)學(xué)習(xí)(七)
Linux shell腳本基礎(chǔ)學(xué)習(xí)這部分如果只看前面間的理論部分雖然有一些例子,但是還不夠系統(tǒng),這里將以具體實例給大家展現(xiàn)Linux shell腳本編程,以幫助大家完善Linux shell基礎(chǔ)的學(xué)習(xí)和提高。
第2部分 實例
現(xiàn)在我們來討論編寫一個腳本的一般步驟。任何優(yōu)秀的腳本都應(yīng)該具有幫助和輸入?yún)?shù)。并且寫一個偽腳本(framework.sh),該腳本包含了大多數(shù)腳本都需要的框架結(jié)構(gòu),是一個非常不錯的主意。這時候,在寫一個新的腳本時我們只需要執(zhí)行一下copy命令:
cp framework.sh myscript
然后再插入自己的函數(shù)。
讓我們再看個例子:
二進制到十進制的轉(zhuǎn)換
腳本 b2d 將二進制數(shù) (比如 1101) 轉(zhuǎn)換為相應(yīng)的十進制數(shù)。這也是一個用expr命令進行數(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"
該腳本使用的算法是利用十進制和二進制數(shù)權(quán)值 (1,2,4,8,16,..),比如二進制"10"可以這樣轉(zhuǎn)換成十進制:
0 * 1 + 1 * 2 = 2
為了得到單個的二進制數(shù)我們是用了lastchar 函數(shù)。該函數(shù)使用wc –c計算字符個數(shù),然后使用cut命令取出末尾一個字符。Chop函數(shù)的功能則是移除最后一個字符。
這個Linux shell腳本實例幫我們完成了轉(zhuǎn)換,下一次我們將舉例一個文件循環(huán)程序。
【編輯推薦】