詳細介紹Linux shell指令碼基礎學習(七)

來源:互聯網
上載者:User

Linux shell指令碼基礎學習這部分如果只看前面間的理論部分雖然有一些例子,但是還不夠系統,這裡將以具體執行個體給大家展現Linux shell指令碼編程,以協助大家完善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函數的功能則是移除最後一個字元。

這個Linux shell指令碼執行個體幫我們完成了轉換,下一次我們將舉例一個檔案迴圈程式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.