实例)
现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意。这时候,在写一个新的脚本时我们只需要执行一下copy命令:
cp framework.sh myscript
然后再插入自己的函数。
让我们再看两个例子:
二进制到十进制的转换
脚本b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子:
| 1 | #!/bin/sh |
| 2 | #vim:setsw=4ts=4et: |
| 3 | help() |
| 4 | { |
| 5 | cat< |
| 6 | b2h--convertbinarytodecimal |
| 7 | USAGE:b2h[-h]binarynum |
| 8 | OPTIONS:-hhelptext |
| 9 | EXAMPLE:b2h111010 |
| 10 | willreturn58 |
| 11 | HELP |
| 12 | exit0 |
| 13 | } |
| 14 | error() |
| 15 | { |
| 16 | #printanerrorandexit |
| 17 | echo"$1" |
| 18 | exit1 |
| 19 | } |
| 20 | lastchar() |
| 21 | { |
| 22 | #returnthelastcharacterofastringin$rval |
| 23 | if[-z"$1"];then |
| 24 | #emptystring |
| 25 | rval="" |
| 26 | return |
| 27 | fi |
| 28 | #wcputssomespacebehindtheoutputthisiswhyweneedsed: |
| 29 | numofchar=`echo-n"$1"|wc-c|sed's///g'` |
| 30 | #nowcutoutthelastchar |
| 31 | rval=`echo-n"$1"|cut-b$numofchar` |
| 32 | } |
| 33 | |
| 34 | chop() |
| 35 | { |
| 36 | #removethelastcharacterinstringandreturnitin$rval |
| 37 | if[-z"$1"];then |
| 38 | #emptystring |
| 39 | rval="" |
| 40 | return |
| 41 | fi |
| 42 | #wcputssomespacebehindtheoutputthisiswhyweneedsed: |
| 43 | numofchar=`echo-n"$1"|wc-c|sed's///g'` |
| 44 | if["$numofchar"="1"];then |
| 45 | #onlyonecharinstring |
| 46 | rval="" |
| 47 | return |
| 48 | fi |
| 49 | numofcharminus1=`expr$numofchar"-"1` |
| 50 | #nowcutallbutthelastchar: |
| 51 | rval=`echo-n"$1"|cut-b0-${numofcharminus1}` |
| 52 | } |
| 53 | while[-n"$1"];do |
| 54 | case$1in |
| 55 | -h)help;shift1;;#functionhelpiscalled |
| 56 | --)shift;break;;#endofoptions |
| 57 | -*)error"error:nosuchoption$1.-hforhelp";; |
| 58 | *)break;; |
| 59 | esac |
| 60 | done |
| 61 | #Themainprogram |
| 62 | sum=0 |
| 63 | weight=1 |
| 64 | #oneargmustbegiven: |
| 65 | [-z"$1"]&&help |
| 66 | binnum="$1" |
| 67 | binnumorig="$1" |
| 68 | |
| 69 | while[-n"$binnum"];do |
| 70 | lastchar"$binnum" |
| 71 | if["$rval"="1"];then |
| 72 | sum=`expr"$weight""+""$sum"` |
| 73 | fi |
| 74 | #removethelastpositionin$binnum |
| 75 | chop"$binnum" |
| 76 | binnum="$rval" |
| 77 | weight=`expr"$weight""*"2` |
| 78 | done |
| 79 | echo"binary$binnumorigisdecimal$sum" |
| 80 |
该脚本使用的算法是利用十进制和二进制数权值 (1,2,4,8,16,..),比如二进制"10"可以这样转换成十进制:
0 * 1 + 1 * 2 = 2
为了得到单个的二进制数我们是用了lastchar 函数。该函数使用wc –c计算字符个数,然后使用cut命令取出末尾一个字符。Chop函数的功能则是移除最后一个字符。
本文介绍了一个用于将二进制数转换为十进制数的Shell脚本示例。脚本通过定义帮助信息、错误处理及核心转换逻辑实现了功能,并详细解释了算法原理。
581

被折叠的 条评论
为什么被折叠?



