Shell脚本之进制转换器


aihuafeng66t
克里斯蒂亚诺诺 2024-01-09 16:29:17 65289 赞同 0 反对 0
分类: 资源
Shell脚本之进制转换器

一、需求说明
  计算IP地址我们经常需要将十进制和二进制数值之间进行转换,实际上进制之间转换通过bc命令就可以完成。此进制转换器shell脚本就是利用bc进制转换功能来实现我们的需求,并做了一些完善,例如bc要求十六进制字符为大写,脚本进行了优化输入大小写都可以。脚本针对输入的数值进行了校验,如果数值格式输入错误,会报错提示。bc命令的安装和使用见博文Linux命令之bc命令。

二、脚本内容
#!/bin/bash
#script name: conversion.sh
#author: wuhs
#description: 此脚本用于二进制和十进制之间的转换
#date: 2022-05-09

#参数定义
#进制转换类型参数
f=$1
#待转换数值参数
d=$2

case $1 in
  2to10)
    if echo $d |grep -E "^[0,1]*$" >/dev/null;then
      echo "obase=10;ibase=2;$d" |bc
    else
      echo "参数2要求输入二进制数"
    fi
  ;;
  10to2)
    if echo $d |grep -E "^[0-9]*$" >/dev/null;then
      echo "obase=2;ibase=10;$d" |bc
    else
      echo "参数2要求输入十进制整数"
    fi
  ;;
  8to10)
    if echo $d |grep -E "^[01234567]*$" >/dev/null;then
      echo "obase=10;ibase=8;$d" |bc
    else
      echo "参数2要求输入八进制字符"
    fi
  ;;
  10to8)
    if echo $d |grep -E "^[0-9]*$" >/dev/null;then
      echo "obase=8;ibase=10;$d" |bc
    else
      echo "参数2要求输入十进制整数"
    fi
  ;;
  16to10)
    if echo $d |grep -E "^[0-9A-Fa-f]*$" >/dev/null;then
      d=`echo $d |tr a-z A-Z`
      echo "obase=10;ibase=16;$d" |bc
    else
      echo "参数2要求输入十六进制字符"
    fi
  ;;
  10to16)
    if echo $d |grep -E "^[0-9]*$" >/dev/null;then
      echo "obase=16;ibase=10;$d" |bc
    else
      echo "参数2要求输入十进制整数"
    fi
  ;;
  2to8)
    if echo $d |grep -E "^[0,1]*$" >/dev/null;then
      echo "obase=8;ibase=2;$d" |bc
    else
      echo "参数2要求输入二进制数"
    fi
  ;;
  8to2)
    if echo $d |grep -E "^[01234567]*$" >/dev/null;then
      echo "obase=2;ibase=8;$d" |bc
    else
      echo "参数2要求输入八进制字符"
    fi
  ;;
  2to16)
    if echo $d |grep -E "^[0,1]*$" >/dev/null;then
      echo "obase=16;ibase=2;$d" |bc
    else
      echo "参数2要求输入二进制数"
    fi
  ;;
  16to2)
    if echo $d |grep -E "^[0-9A-Fa-f]*$" >/dev/null;then
      d=`echo $d |tr a-z A-Z`
      echo "obase=2;ibase=16;$d" |bc
    else
      echo "参数2要求输入十六进制字符"
    fi
  ;;
  8to16)
    if echo $d |grep -E "^[01234567]*$" >/dev/null;then
      echo "obase=16;ibase=8;$d" |bc
    else
      echo "参数2要求输入八进制字符"
    fi
  ;;
  16to8)
    if echo $d |grep -E "^[0-9A-Fa-f]*$" >/dev/null;then
      d=`echo $d |tr a-z A-Z`
      echo "obase=8;ibase=16;$d" |bc
    else
      echo "参数2要求输入十六进制字符"
    fi
  ;;
  *)
    echo "参数1输入错误"
    exit
  ;;
esac
————————————————


4、十进制转换为八进制
[root@s146 ipcheck]# ./conversion.sh 10to8 59
73
[root@s146 ipcheck]# ./conversion.sh 10to8 591
1117
[root@s146 ipcheck]# ./conversion.sh 10to8 591A
参数2要求输入十进制整数

5、十六进制转换为十进制
[root@s146 ipcheck]# ./conversion.sh 16to10 A
10
[root@s146 ipcheck]# ./conversion.sh 16to10 X
参数2要求输入十六进制字符
[root@s146 ipcheck]# ./conversion.sh 16to10 G
参数2要求输入十六进制字符
[root@s146 ipcheck]# ./conversion.sh 16to10 abc
2748

6、十进制转换为八进制
[root@s146 ipcheck]# ./conversion.sh 10to16 2748
ABC
[root@s146 ipcheck]# ./conversion.sh 10to16 17
11
[root@s146 ipcheck]# ./conversion.sh 10to16 15
F

7、二进制转换为八进制
[root@s146 ipcheck]# ./conversion.sh 2to8 1011
13
[root@s146 ipcheck]# ./conversion.sh 2to8 1011.
参数2要求输入二进制数

8、八进制转换为二进制
[root@s146 ipcheck]# ./conversion.sh 8to2 31
11001
[root@s146 ipcheck]# ./conversion.sh 8to2 31a
参数2要求输入八进制字符

9、八进制转换为十六进制
[root@s146 ipcheck]# ./conversion.sh 8to16 13
B
[root@s146 ipcheck]# ./conversion.sh 8to16 12
A
[root@s146 ipcheck]# ./conversion.sh 8to16 12c
参数2要求输入八进制字符

10、十六进制转换为八进制
[root@s146 ipcheck]# ./conversion.sh 16to8 C
14
[root@s146 ipcheck]# ./conversion.sh 16to8 c
14
[root@s146 ipcheck]# ./conversion.sh 16to8 c1d
6035
[root@s146 ipcheck]# ./conversion.sh 16to8 c1dg
参数2要求输入十六进制字符
————————————————

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
克里斯蒂亚诺诺L1
粉丝 0 资源 831 + 关注 私信
最近热门资源
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD  81
以openkylin为例编译安装内核  77
分享解决宏碁电脑关机时自动重启的方法  73
统信uosboot区分未挂载导致更新备份失败  64
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作  63
统信uos安装mysql的实例参考  60
格之格打印机dp3300系列国产系统uos打印机驱动选择  57
在银河麒麟高级服务器操作系统V10SP3中,需要将默认shell类型修改为csh。  51
MySQL国产平替最佳选择---万里数据库(GreatDB)  45
分享在麒麟系统中权限异常的解决方法  5
最近下载排行榜
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD 0
以openkylin为例编译安装内核 0
分享解决宏碁电脑关机时自动重启的方法 0
统信uosboot区分未挂载导致更新备份失败 0
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作 0
统信uos安装mysql的实例参考 0
格之格打印机dp3300系列国产系统uos打印机驱动选择 0
在银河麒麟高级服务器操作系统V10SP3中,需要将默认shell类型修改为csh。 0
MySQL国产平替最佳选择---万里数据库(GreatDB) 0
分享在麒麟系统中权限异常的解决方法 0
作者收入月榜
1

prtyaa 收益400.83元

2

zlj141319 收益237.91元

3

哆啦漫漫喵 收益231.75元

4

IT-feng 收益219.92元

5

1843880570 收益214.2元

6

风晓 收益208.24元

7

777 收益173.17元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!