1. 

2. #!/bin/bash
3. while true
4. do
5. echo "#############################################################"
6. echo "# Author: netcat #"
7. echo "# Lable: jinzhi.sh #"
8. echo "# QQ: 297020555 #"
9. echo "# Create Date: 2011-06-17 #"
10. echo "# Version: v1.0 #"
11. echo "#############################################################"
12. echo ""
13.
echo "1 2 ---> 8" #二进制转换成八进制

14.
echo "2 2 ---> 10" #二进制转换成十进制

15.
echo "3 2 ---> 16" #二进制转换成十六进制

16.
echo "4 8 ---> 2" #八进制转换成二进制

17.
echo "5 8 ---> 10" #八进制转换成十进制

18.
echo "6 8 ---> 16" #八进制转换成十六进制

19.
echo "7 10 ---> 2" #十进制转换成二进制

20.
echo "8 10 ---> 8" #十进制转换成八进制

21.
echo "9 10 ---> 16" #十进制转换成十六进制

22.
echo "10 16 ---> 2" #十六进制转换成二进制

23.
echo "11 16 ---> 8" #十六进制转换成八进制

24.
echo "12 16 ---> 10" #十六进制转换成十进制

25. echo "13 exit" #退出
26. echo ""
27. echo "enter your select:" #输入选择
28. read ans #读取选择的值,赋值给ans
29. case $ans in #读取$ans的值
30. 1) #如果ans为1时
31. read -p "enter your num:" num #输入你要转换的数,赋值给num
32.
a=`echo $num|tr "[2-9][a-z][A-Z]" "[4-5][A-Z][a-z]"` #对num进行判断

33. if [ $num != $a ] #如果num不等于a
34. then
35. echo -e "\033[40;31;5m failt \033[0m" #说明输入的num值不符合二进制数的标准(0和1)
36. sleep 2 #停顿2s
37. else #否则的话,num符合二进制的标准
38.
result=`echo "obase=8;ibase=2;$num"|bc` #把num转换成八进制,赋值给result

39. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m" #输出result的值
40. sleep 4 #停顿4s
41. fi
42. ;;
43. 2)
44. read -p "enter your num:" num
45.
a=`echo $num|tr "[2-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`

46. if [ $num != $a ]
47. then
48. echo -e "\033[40;31;5m failt \033[0m"
49. sleep 2
50. else
51.
result=`echo "obase=10;ibase=2;$num"|bc` #需要注意:obase在前,ibase在后,不然会出错

52. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"
53. sleep 4
54. fi
55. ;;
56. 3)
57. read -p "enter your num:" num
58.
a=`echo $num|tr "[2-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`

59. if [ $num != $a ]
60. then
61. echo -e "\033[40;31;5m failt \033[0m"
62. sleep 2
63. else
64.
result=`echo "obase=16;ibase=2;$num"|bc`

65. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"
66. sleep 4
67. fi
68. ;;
69. 4)
70. read -p "enter your num:" num
71.
a=`echo $num|tr "[8-9][a-z][A-Z]" "[4-5][A-Z][a-z]"` #判断是否符合八进制标准

72. if [ $num != $a ]
73. then
74. echo -e "\033[40;31;5m failt \033[0m"
75. sleep 2
76. else
77.
result=`echo "obase=2;ibase=8;$num"|bc`

78. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"
79. sleep 4
80. fi
81. ;;
82. 5)
83. read -p "enter your num:" num
84.
a=`echo $num|tr "[8-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`

85. if [ $num != $a ]
86. then
87. echo -e "\033[40;31;5m failt \033[0m"
88. sleep 2
89. else
90.
result=`echo "obase=10;ibase=8;$num"|bc`

91. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"
92. sleep 4
93. fi
94. ;;
95. 6)
96. read -p "enter your num:" num
97.
a=`echo $num|tr "[8-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`

98. if [ $num != $a ]
99. then
100. echo -e "\033[40;31;5m failt \033[0m"
101. sleep 2
102. else
103.
result=`echo "obase=16;ibase=8;$num"|bc`

104. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"
105. sleep 4
106. fi
107. ;;
108. 7)
109. read -p "enter your num:" num
110.
a=`echo $num|tr "[a-z][A-Z]" "[A-Z][a-z]"` #判断是否符合十进制标准

111. if [ $num != $a ]
112. then
113. echo -e "\033[40;31;5m failt \033[0m"
114. sleep 2
115. else
116.
result=`echo "obase=2;ibase=10;$num"|bc`

117. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"
118. sleep 4
119. fi
120. ;;
121. 8)
122. read -p "enter your num:" num
123.
a=`echo $num|tr "[a-z][A-Z]" "[A-Z][a-z]"`

124. if [ $num != $a ]
125. then
126. echo -e "\033[40;31;5m failt \033[0m"
127. sleep 2
128. else
129.
result=`echo "obase=8;ibase=10;$num"|bc`

130. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"
131. sleep 4
132. fi
133. ;;
134. 9)
135. read -p "enter your num:" num
136.
a=`echo $num|tr "[a-z][A-Z]" "[A-Z][a-z]"`

137. if [ $num != $a ]
138. then
139. echo -e "\033[40;31;5m failt \033[0m"
140. sleep 2
141. else
142.
result=`echo "obase=16;ibase=10;$num"|bc`

143. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"
144. sleep 4
145. fi
146. ;;
147. 10)
148. read -p "enter your num:" num
149.
a=`echo $num|tr "[g-z]" "[G-Z]"` #判断是否符合十六进制标准

150. if [ $num != $a ]
151. then
152. echo -e "\033[40;31;5m failt \033[0m"
153. sleep 2
154. else
155.
num=`echo $num|tr "[a-f]" "[A-F]"` #不知道为什么,十六进制只是别大写字母,所以在这把小写的转成大写,大写的不变

156.
result=`echo "obase=2;ibase=16;$num"|bc`

157. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"
158. sleep 4
159. fi
160. ;;
161. 11)
162. read -p "enter your num:" num
163.
a=`echo $num|tr "[g-z]" "[G-Z]"`

164. if [ $num != $a ]
165. then
166. echo -e "\033[40;31;5m failt \033[0m"
167. sleep 2
168. else
169.
num=`echo $num|tr "[a-f]" "[A-F]"`

170.
result=`echo "obase=8;ibase=16;$num"|bc`

171. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"
172. sleep 4
173. fi
174. ;;
175. 12)
176. read -p "enter your num:" num
177.
a=`echo $num|tr "[g-z]" "[G-Z]"`

178. if [ $num != $a ]
179. then
180. echo -e "\033[40;31;5m failt \033[0m"
181. sleep 2
182. else
183.
num=`echo $num|tr "[a-f]" "[A-F]"`

184.
result=`echo "obase=10;ibase=16;$num"|bc`

185. echo -e "\033[40;32;1m result is \033[40;31;5m $result\033[0m"
186. sleep 4
187. fi
188. ;;
189. 13)
190. exit
191. ;;
192. *)
193. echo -e "\033[40;31;5m failt \033[0m"
194. sleep 2
195. ;;
196. esac
197. done
198.


下面给大家截个图:

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

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

 


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


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


怎么判断输入的内容是否符合二进制标准(0和1)?

我是这么解决的:

a=`echo $num|tr "[2-9][a-z][A-Z]" "[4-5][A-Z][a-z]"`

如果num和a的值相同,则符合要求。