[转]linux下进制转换的shell脚本

时间:2022-11-25 20:33:45
 
 
 
  1. #!/bin/bash  
  2. while true  
  3. do  
  4. echo "#############################################################"  
  5. echo "# Author:                netcat                             #"  
  6. echo "# Lable:                 jinzhi.sh                          #"  
  7. echo "# QQ:                    297020555                          #"  
  8. echo "# Create Date:           2011-06-17                         #"  
  9. echo "# Version:               v1.0                               #"  
  10. echo "#############################################################"  
  11. echo ""  
  12. echo "1  2 ---> 8"     #二进制转换成八进制  
  13. echo "2  2 ---> 10"    #二进制转换成十进制   
  14. echo "3  2 ---> 16"    #二进制转换成十六进制    
  15. echo "4  8 ---> 2"     #八进制转换成二进制   
  16. echo "5  8 ---> 10"    #八进制转换成十进制  
  17. echo "6  8 ---> 16"    #八进制转换成十六进制  
  18. echo "7  10 ---> 2"    #十进制转换成二进制  
  19. echo "8  10 ---> 8"    #十进制转换成八进制  
  20. echo "9  10 ---> 16"   #十进制转换成十六进制  
  21. echo "10 16 ---> 2"    #十六进制转换成二进制  
  22. echo "11 16 ---> 8"    #十六进制转换成八进制  
  23. echo "12 16 ---> 10"   #十六进制转换成十进制  
  24. echo "13   exit"       #退出   
  25. echo ""  
  26. echo "enter your select:"  #输入选择  
  27. read ans                   #读取选择的值,赋值给ans  
  28. case $ans in               #读取$ans的值  
  29. 1)                         #如果ans为1时  
  30. read -p  "enter your num:" num #输入你要转换的数,赋值给num  
  31. a=`echo $num|tr "[2-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`  #对num进行判断  
  32. if [ $num != $a ]   #如果num不等于a  
  33. then  
  34. echo -e "\033[40;31;5m failt \033[0m"  #说明输入的num值不符合二进制数的标准(0和1)    
  35. sleep 2          #停顿2s  
  36. else              #否则的话,num符合二进制的标准  
  37. result=`echo "obase=8;ibase=2;$num"|bc`  #把num转换成八进制,赋值给result  
  38. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m" #输出result的值  
  39. sleep 4     #停顿4s  
  40. fi  
  41. ;;  
  42. 2)  
  43. read -p  "enter your num:" num  
  44. a=`echo $num|tr "[2-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`  
  45. if [ $num != $a ]  
  46. then  
  47. echo -e "\033[40;31;5m failt \033[0m"  
  48. sleep 2  
  49. else  
  50. result=`echo "obase=10;ibase=2;$num"|bc`  #需要注意:obase在前,ibase在后,不然会出错  
  51. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"  
  52. sleep 4  
  53. fi  
  54. ;;  
  55. 3)  
  56. read -p  "enter your num:" num  
  57. a=`echo $num|tr "[2-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`  
  58. if [ $num != $a ]  
  59. then  
  60. echo -e "\033[40;31;5m failt \033[0m"  
  61. sleep 2  
  62. else  
  63. result=`echo "obase=16;ibase=2;$num"|bc`  
  64. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"  
  65. sleep 4  
  66. fi  
  67. ;;  
  68. 4)  
  69. read -p  "enter your num:" num  
  70. a=`echo $num|tr "[8-9][a-z][A-Z]" "[4-5][A-Z][a-z]"` #判断是否符合八进制标准  
  71. if [ $num != $a ]  
  72. then  
  73. echo -e "\033[40;31;5m failt \033[0m"  
  74. sleep 2  
  75. else  
  76. result=`echo "obase=2;ibase=8;$num"|bc`  
  77. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"  
  78. sleep 4  
  79. fi  
  80. ;;  
  81. 5)  
  82. read -p  "enter your num:" num  
  83. a=`echo $num|tr "[8-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`  
  84. if [ $num != $a ]  
  85. then  
  86. echo -e "\033[40;31;5m failt \033[0m"  
  87. sleep 2  
  88. else  
  89. result=`echo "obase=10;ibase=8;$num"|bc`  
  90. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"  
  91. sleep 4  
  92. fi  
  93. ;;  
  94. 6)  
  95. read -p  "enter your num:" num  
  96. a=`echo $num|tr "[8-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`   
  97. if [ $num != $a ]  
  98. then  
  99. echo -e "\033[40;31;5m failt \033[0m"  
  100. sleep 2  
  101. else  
  102. result=`echo "obase=16;ibase=8;$num"|bc`  
  103. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"  
  104. sleep 4  
  105. fi  
  106. ;;  
  107. 7)  
  108. read -p  "enter your num:" num  
  109. a=`echo $num|tr "[a-z][A-Z]" "[A-Z][a-z]"` #判断是否符合十进制标准  
  110. if [ $num != $a ]  
  111. then  
  112. echo -e "\033[40;31;5m failt \033[0m"  
  113. sleep 2  
  114. else  
  115. result=`echo "obase=2;ibase=10;$num"|bc`  
  116. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"  
  117. sleep 4  
  118. fi  
  119. ;;  
  120. 8)  
  121. read -p  "enter your num:" num  
  122. a=`echo $num|tr "[a-z][A-Z]" "[A-Z][a-z]"`  
  123. if [ $num != $a ]  
  124. then  
  125. echo -e "\033[40;31;5m failt \033[0m"  
  126. sleep 2  
  127. else  
  128. result=`echo "obase=8;ibase=10;$num"|bc`  
  129. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"  
  130. sleep 4  
  131. fi  
  132. ;;  
  133. 9)  
  134. read -p  "enter your num:" num  
  135. a=`echo $num|tr "[a-z][A-Z]" "[A-Z][a-z]"`  
  136. if [ $num != $a ]  
  137. then  
  138. echo -e "\033[40;31;5m failt \033[0m"  
  139. sleep 2  
  140. else  
  141. result=`echo "obase=16;ibase=10;$num"|bc`  
  142. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"  
  143. sleep 4  
  144. fi  
  145. ;;  
  146. 10)  
  147. read -p  "enter your num:" num  
  148. a=`echo $num|tr "[g-z]" "[G-Z]"`  #判断是否符合十六进制标准  
  149. if [ $num != $a ]  
  150. then  
  151. echo -e "\033[40;31;5m failt \033[0m"  
  152. sleep 2  
  153. else  
  154. num=`echo $num|tr "[a-f]" "[A-F]"` #不知道为什么,十六进制只是别大写字母,所以在这把小写的转成大写,大写的不变  
  155. result=`echo "obase=2;ibase=16;$num"|bc`  
  156. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"  
  157. sleep 4  
  158. fi  
  159. ;;  
  160. 11)  
  161. read -p  "enter your num:" num  
  162. a=`echo $num|tr "[g-z]" "[G-Z]"`  
  163. if [ $num != $a ]  
  164. then  
  165. echo -e "\033[40;31;5m failt \033[0m"  
  166. sleep 2  
  167. else  
  168. num=`echo $num|tr "[a-f]" "[A-F]"`  
  169. result=`echo "obase=8;ibase=16;$num"|bc`  
  170. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"  
  171. sleep 4  
  172. fi  
  173. ;;  
  174. 12)  
  175. read -p  "enter your num:" num  
  176. a=`echo $num|tr "[g-z]" "[G-Z]"`  
  177. if [ $num != $a ]  
  178. then  
  179. echo -e "\033[40;31;5m failt \033[0m"  
  180. sleep 2  
  181. else  
  182. num=`echo $num|tr "[a-f]" "[A-F]"`  
  183. result=`echo "obase=10;ibase=16;$num"|bc`  
  184. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"  
  185. sleep 4  
  186. fi  
  187. ;;  
  188. 13)  
  189. exit  
  190. ;;  
  191. *)  
  192. echo -e "\033[40;31;5m failt \033[0m"  
  193. sleep 2  
  194. ;;  
  195. esac  
  196. done 

下面给大家截个图:

[转]linux下进制转换的shell脚本

[转]linux下进制转换的shell脚本

 

 关于进制转换的问题 :   http://297020555.blog.51cto.com/1396304/591988
关于echo输出颜色的问题:http://297020555.blog.51cto.com/1396304/591943


这个脚本写的比较粗糙,很多内容都不完善,所以拿出来,让大家给点建议。

在过程中遇到个问题,感觉解决的不是很好,希望大家给点意见。

怎么判断输入的内容是否符合二进制标准(0和1)?
我是这么解决的:
a=`echo $num|tr "[2-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`
如果num和a的值相同,则符合要求。

http://297020555.blog.51cto.com/1396304/592030

作者:feiskyer 发表于2011-12-8 12:18:04 原文链接
阅读:9 评论:0 查看评论