天天看點

[轉]linux下進制轉換的shell腳本

#!/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 

下面給大家截個圖:

[轉]linux下進制轉換的shell腳本
[轉]linux下進制轉換的shell腳本

這個腳本寫的比較粗糙,很多内容都不完善,是以拿出來,讓大家給點建議。

在過程中遇到個問題,感覺解決的不是很好,希望大家給點意見。

怎麼判斷輸入的内容是否符合二進制标準(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,如需轉載請自行聯系原作者

繼續閱讀