第5章 b2d shell脚本

#!/bin/sh
help()
{
#用一对HELP之间的字符串表示命令帮助信息并显示,然后退出命令
cat<< help
              b2d - convert binart to decimal
              USAGE:b2d [-h] binarynum
              OPTION: -h help text
              EXAMPLE:b2d 111010
              will return:58
help     
              exit 0
}

error()
         
              echo "$1"
              exit 1
}

lastchar()
         
              #返回在字符串中的最后一个字符
              if [ -z "$1" ]; then
              #是空字符串,返回值为空
                              rval=""
                              return
              fi
             
              #获取字符串中字符的个数
              #wc会在输出添加一些空格,所以我们用sed把它们过滤掉
              numofchar=$(echo -n "$1" | wc -c | sed 's/ //g')
              #获致最后一个字符
              rval=$(echo -n "$1" | cut -b "$numofchar")
}


chop()
         
              #移去字符串中的最后一个字符,然后返回剩下的字符串
              if [ -z "$1" ]; then
              #是空字符串,返回值为空
              rval=""
              return
              fi
             
              #获取字符串中字符的个数
              #wc会在输出同添加上纛空格,所以我们用sed把它们过滤掉
              numofchar=$( echo -n "$1" | wc -c | sed 's/ //g')
              if [ "$numofchar" = "1" ]; then
              #在字符串中有一个字符
              rval=""
              return
              fi


              numofcharminus1=$[$numofchar -1]
              #获取移除最后一个字符后的字符串
              rval=$(echo -n $1 | cut -b 1-${numofcharminus1})
}
while [ -n "$1" ]; do
#命令行参数不为空
              case $1 in
                              -h) help;shift1;;#调用帮助函数
                              --) shift;break;;#结束选项
                              -*) error "error:no such option $1, -h for help";; #错误提示`
                              *) break;;#退出判断
              esac
done

#主程序开始
sum=0
weight=1

#至少要给出一个命令行参数
[ -z "$1" ]  && help

#从命令行参数中获取二进制娄的字符串
binnum="$1"
binnumorig="$1"

while [ -n "$binnum" ]; do
#二进制字符串不为空,获取字符串中的最后一们字符
              lastchar "$binnum"
              if [ "$rval" = "1" ]; then
                              #最后一个字符为1,总和增1
                              sum=$[$weight + $sum]
              fi

              #移除字符串的最后一位赋给循环变量
              chop $binnum
              binnum=$rval
              #权重翻倍
              weight=$[$weight * 2]
done
#显示用户名及其转换结果
echo -e "Hello,$USER. \n\nBinary $binnumorig is decimal $sum"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值