#!/bin/bash
while true
do
echo "#############################################################"
echo "# Author: netcat #"
echo "# Lable: jinzhi.sh #"
echo "# QQ: 297020555 #"
echo "# Create Date: 2011-06-17 #"
echo "# Version: v1.0 #"
echo ""
echo "1 2 ---> 8" #二進制轉換成八進制
echo "2 2 ---> 10" #二進制轉換成十進制
echo "3 2 ---> 16" #二進制轉換成十六進制
echo "4 8 ---> 2" #八進制轉換成二進制
echo "5 8 ---> 10" #八進制轉換成十進制
echo "6 8 ---> 16" #八進制轉換成十六進制
echo "7 10 ---> 2" #十進制轉換成二進制
echo "8 10 ---> 8" #十進制轉換成八進制
echo "9 10 ---> 16" #十進制轉換成十六進制
echo "10 16 ---> 2" #十六進制轉換成二進制
echo "11 16 ---> 8" #十六進制轉換成八進制
echo "12 16 ---> 10" #十六進制轉換成十進制
echo "13 exit" #退出
echo "enter your select:" #輸入選擇
read ans #讀取選擇的值,指派給ans
case $ans in #讀取$ans的值
1) #如果ans為1時
read -p "enter your num:" num #輸入你要轉換的數,指派給num
a=`echo $num|tr "[2-9][a-z][A-Z]" "[4-5][A-Z][a-z]"` #對num進行判斷
if [ $num != $a ] #如果num不等于a
then
echo -e "\033[40;31;5m failt \033[0m" #說明輸入的num值不符合二進制數的标準(0和1)
sleep 2 #停頓2s
else #否則的話,num符合二進制的标準
result=`echo "obase=8;ibase=2;$num"|bc` #把num轉換成八進制,指派給result
echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m" #輸出result的值
sleep 4 #停頓4s
fi
;;
2)
read -p "enter your num:" num
a=`echo $num|tr "[2-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`
if [ $num != $a ]
echo -e "\033[40;31;5m failt \033[0m"
sleep 2
else
result=`echo "obase=10;ibase=2;$num"|bc` #需要注意:obase在前,ibase在後,不然會出錯
echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"
sleep 4
3)
result=`echo "obase=16;ibase=2;$num"|bc`
4)
a=`echo $num|tr "[8-9][a-z][A-Z]" "[4-5][A-Z][a-z]"` #判斷是否符合八進制标準
result=`echo "obase=2;ibase=8;$num"|bc`
5)
a=`echo $num|tr "[8-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`
result=`echo "obase=10;ibase=8;$num"|bc`
6)
a=`echo $num|tr "[8-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`
result=`echo "obase=16;ibase=8;$num"|bc`
7)
a=`echo $num|tr "[a-z][A-Z]" "[A-Z][a-z]"` #判斷是否符合十進制标準
result=`echo "obase=2;ibase=10;$num"|bc`
8)
a=`echo $num|tr "[a-z][A-Z]" "[A-Z][a-z]"`
result=`echo "obase=8;ibase=10;$num"|bc`
9)
result=`echo "obase=16;ibase=10;$num"|bc`
10)
a=`echo $num|tr "[g-z]" "[G-Z]"` #判斷是否符合十六進制标準
num=`echo $num|tr "[a-f]" "[A-F]"` #不知道為什麼,十六進制隻是别大寫字母,是以在這把小寫的轉成大寫,大寫的不變
result=`echo "obase=2;ibase=16;$num"|bc`
11)
a=`echo $num|tr "[g-z]" "[G-Z]"`
num=`echo $num|tr "[a-f]" "[A-F]"`
result=`echo "obase=8;ibase=16;$num"|bc`
12)
result=`echo "obase=10;ibase=16;$num"|bc`
13)
exit
*)
esac
done
下面給大家截個圖:

這個腳本寫的比較粗糙,很多内容都不完善,是以拿出來,讓大家給點建議。
在過程中遇到個問題,感覺解決的不是很好,希望大家給點意見。
怎麼判斷輸入的内容是否符合二進制标準(0和1)?
我是這麼解決的:
a=`echo $num|tr "[2-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`
如果num和a的值相同,則符合要求。
本文轉自feisky部落格園部落格,原文連結:http://www.cnblogs.com/feisky/archive/2011/12/08/2310373.html,如需轉載請自行聯系原作者
本文轉自feisky部落格園部落格,原文連結:xxxxx,如需轉載請自行聯系原作者