二进制转十进制
#!/bin/bash
#b2d.sh: convert binary number to decimal number
#Usage: ./b2d.sh number
BAD_ARGS=65
WRONG_ARGS=66
ARGS=1 #参数数目
if [ $# -ne $ARGS ]
then
echo "Usage: `basename $0` binary_number"
exit $BAD_ARGS
fi
case $1 in
[01]*) #判断是否为二进制数
count=$(echo $1 | wc -c)
let "count--" #求出所输入的二进制数的位数
i=0
n=$count
result=0
while [ $i -lt $count ]
do
c=$(echo $1 | cut -b$n) #从最低位开始依次得到该位上的数,如1101,将依次得到1、0、1、1
let "result+=c*2**i" #依次累加转换为十进制数
let "i++"
let "n--"
done
echo "The decimal number of $1 is $result."
exit 0
;;
*)
echo "Please run this script with a binary number"
exit $WRONG_ARGS
;;
esac
十进制转二进制
#!/bin/bash
#d2b.sh: convert a decimal number to a binary number
#Usage: ./d2b.sh decimal_number
BAD_ARGS=65
WRONG_ARGS=66
ARGS=1 #参数数目
if [ $# -ne $ARGS ]
then
echo "Usage: `basename $0` decimal_number"
exit $BAD_ARGS
fi
function is_positive_int() #用于判断输入是否为正整数,是返回1,否返回0
{
if [ $# -lt 1 ]
then
return 0
fi
if [[ $1 =~ ^[1-9][0-9]*$ ]]
then
return 1
fi
if [[ $1 =~ ^0$ ]]
then
return 1
fi
return 0
}
is_positive_int $1 #调用该函数进行判断
if [ $? -ne 1 ] #不为1,则不是十进制正整数,提示并退出
then
echo "Please run this script with a decimal number."
exit $WRONG_ARGS
else
#echo "$1 is a decimal number."
num=$1
while [ $num -gt 0 ] #辗转相除法
do
let r=num%2
result=$r$result
let num=num/2
done
echo "The binary number of $1 is $result."
exit 0
fi