天天看点

[转]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,如需转载请自行联系原作者

继续阅读