#!/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"
help()
{
#用一对HELP之间的字符串表示命令帮助信息并显示,然后退出命令
cat<< help
help
}
error()
{
}
lastchar()
{
}
chop()
{
}
while [ -n "$1" ]; do
#命令行参数不为空
done
#主程序开始
sum=0
weight=1
#至少要给出一个命令行参数
[ -z "$1" ]
#从命令行参数中获取二进制娄的字符串
binnum="$1"
binnumorig="$1"
while [ -n "$binnum" ]; do
#二进制字符串不为空,获取字符串中的最后一们字符
done
#显示用户名及其转换结果
echo -e "Hello,$USER. \n\nBinary $binnumorig is decimal $sum"