任何优秀的脚本都应该具有帮助和输入参数脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子: 如若直接输入./name.sh b2d -- convert binary to decimal USAGE: b2d [-h] binarynum OPTIONS: -h help text EXAMPLE: b2d 111010will return 58./name.sh 11binary 11 is decimal 3#!/bin/bash# vim: set sw=4 ts=4 et:help(){   cat << HELP   b2d -- convert binary to decimal USAGE: b2d [-h] binarynum OPTIONS: -h help text EXAMPLE: b2d 111010will return 58HELP   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" | sed 's/ //g' | wc -c `   # 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 -$numofcharminus1`    #原来的 rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`运行时出错.   #原因是cut从1开始计数,应该是cut -b 1-${numofcharminus1}} while [ -n "$1" ]; docase $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;;esacdone# The main programsum=0weight=1# one arg must be given:[ -z "$1" ] && helpbinnum="$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"#