本文共 2013 字,大约阅读时间需要 6 分钟。
任何优秀的脚本都应该具有帮助和输入参数脚本 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"#
转载于:https://blog.51cto.com/bad51men/1143280