#!/bin/bash
# SCRIPT: binary2dec.sh
# USAGE: binary2dec.sh Binary_Numbers(s)
# PURPOSE: Binary to Decimal Conversion. Takes input as command line
# arguments.
# \\\\ ////
# \\ - - //
# @ @
# ---oOOo-( )-oOOo---
#
#####################################################################
# Script Starts Here #
#####################################################################
if [ $# -eq 0 ]
then
echo "Argument(s) not supplied "
echo "Usage: binary2dec.sh Binary_Number(s)"
else
echo -e "\033[1mBINARY \t\t DECIMAL\033[0m"
while [ $# -ne 0 ]
do
Binary=$1
Bnumber=$Binary
Decimal=0
power=1
while [ $Binary -ne 0 ]
do
rem=$(expr $Binary % 10 )
Decimal=$((Decimal+(rem*power)))
power=$((power*2))
Binary=$(expr $Binary / 10)
done
echo -e "$Bnumber \t\t $Decimal"
shift
done
fi
#NOTE: Using bc command you can directly get output at command line.
# Here we're converting the binary number 111 to a base 10 (decimal)
# number.
#
# $ echo 'ibase=2;obase=A;111' | bc
# 7
#
#Note that the obase is "A" and not "10".The reason for this is you've
# set the ibase to 2, so if you now had tried to use "10" as the value
# for the obase, it would stay as "2", because "10" in base 2 is "2".
# So you need to use hex to break out of binary mode or use obase=1010
#
# $ echo 'ibase=2;obase=1010;10000' | bc
# 16
# $ echo 'ibase=2;obase=1010;1000001' | bc
# 65
#
# You can omit obase=A, because default obase is 10(decimal).
# $ echo 'ibase=2;1000001' | bc
# 65
OUTPUT:
# sh binary2dec.sh 100 1111 1111111 1000000
BINARY DECIMAL
100 4
1111 15
1111111 127
1000000 64
# sh binary2dec.sh 1111111111111111111
BINARY DECIMAL
1111111111111111111 524287
# sh binary2dec.sh 10000000000000000000
BINARY DECIMAL
binary2dec.sh:line 28:[:10000000000000000000:integer expression expected
10000000000000000000
NOTE:My bash can handle upto 9223372036854775807.
But with bc command you can do more.
# echo 'ibase=2;10000000000000000000'|bc
524288
# echo 'ibase=2;110000000000000000000'|bc
1572864
Monday, December 20, 2010
Binary to Decimal Conversion Shell Script
Labels:
Beginners Scripts
Subscribe to:
Post Comments (Atom)
Thanks man!
ReplyDelete#!/bin/bash
ReplyDelete#convert any number of binary numbers to hex
#use "silent" and an argument to get briefer output for subsequent arguments. Example
#bintohex 11111 silent 111111
if [[ ! $1 ]]
then
echo convert any number of binary numbers to hex
echo use \"silent\" as an argument to get briefer output for subsequent arguments. Example
echo $0 11111 silent 111111
fi
for binary in $*
do
if [[ "$binary" == silent ]]
then
silent=1
continue
else
if [[ "${binary/[^01]}" != "$binary" ]]
then
echo "\"$binary\" is not a binary number - just use 0's and 1's"
continue
fi
fi
let value=2#$binary
if (( ! silent ))
then
echo -n "binary 2#$binary = hexadecimal 0x"
fi
printf "%X\n" $value
done