溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Shell腳本之進(jìn)制轉(zhuǎn)換器如何實(shí)現(xiàn)

發(fā)布時間:2023-03-25 16:48:55 來源:億速云 閱讀:118 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“Shell腳本之進(jìn)制轉(zhuǎn)換器如何實(shí)現(xiàn)”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、需求說明

計算IP地址我們經(jīng)常需要將十進(jìn)制和二進(jìn)制數(shù)值之間進(jìn)行轉(zhuǎn)換,實(shí)際上進(jìn)制之間轉(zhuǎn)換通過bc命令就可以完成。此進(jìn)制轉(zhuǎn)換器shell腳本就是利用bc進(jìn)制轉(zhuǎn)換功能來實(shí)現(xiàn)我們的需求,并做了一些完善,例如bc要求十六進(jìn)制字符為大寫,腳本進(jìn)行了優(yōu)化輸入大小寫都可以。腳本針對輸入的數(shù)值進(jìn)行了校驗,如果數(shù)值格式輸入錯誤,會報錯提示。

二、腳本內(nèi)容

#!/bin/bash
#script name: conversion.sh
#author: wuhs
#description: 此腳本用于二進(jìn)制和十進(jìn)制之間的轉(zhuǎn)換
#date: 2022-05-09

#參數(shù)定義
#進(jìn)制轉(zhuǎn)換類型參數(shù)
f=$1
#待轉(zhuǎn)換數(shù)值參數(shù)
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 "參數(shù)2要求輸入二進(jìn)制數(shù)"
    fi
  ;;
  10to2)
    if echo $d |grep -E "^[0-9]*$" >/dev/null;then
      echo "obase=2;ibase=10;$d" |bc
    else
      echo "參數(shù)2要求輸入十進(jìn)制整數(shù)"
    fi
  ;;
  8to10)
    if echo $d |grep -E "^[01234567]*$" >/dev/null;then
      echo "obase=10;ibase=8;$d" |bc
    else
      echo "參數(shù)2要求輸入八進(jìn)制字符"
    fi
  ;;
  10to8)
    if echo $d |grep -E "^[0-9]*$" >/dev/null;then
      echo "obase=8;ibase=10;$d" |bc
    else
      echo "參數(shù)2要求輸入十進(jìn)制整數(shù)"
    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 "參數(shù)2要求輸入十六進(jìn)制字符"
    fi
  ;;
  10to16)
    if echo $d |grep -E "^[0-9]*$" >/dev/null;then
      echo "obase=16;ibase=10;$d" |bc
    else
      echo "參數(shù)2要求輸入十進(jìn)制整數(shù)"
    fi
  ;;
  2to8)
    if echo $d |grep -E "^[0,1]*$" >/dev/null;then
      echo "obase=8;ibase=2;$d" |bc
    else
      echo "參數(shù)2要求輸入二進(jìn)制數(shù)"
    fi
  ;;
  8to2)
    if echo $d |grep -E "^[01234567]*$" >/dev/null;then
      echo "obase=2;ibase=8;$d" |bc
    else
      echo "參數(shù)2要求輸入八進(jìn)制字符"
    fi
  ;;
  2to16)
    if echo $d |grep -E "^[0,1]*$" >/dev/null;then
      echo "obase=16;ibase=2;$d" |bc
    else
      echo "參數(shù)2要求輸入二進(jìn)制數(shù)"
    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 "參數(shù)2要求輸入十六進(jìn)制字符"
    fi
  ;;
  8to16)
    if echo $d |grep -E "^[01234567]*$" >/dev/null;then
      echo "obase=16;ibase=8;$d" |bc
    else
      echo "參數(shù)2要求輸入八進(jìn)制字符"
    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 "參數(shù)2要求輸入十六進(jìn)制字符"
    fi
  ;;
  *)
    echo "參數(shù)1輸入錯誤"
    exit
  ;;
esac

三、使用示例

1、二進(jìn)制轉(zhuǎn)換為十進(jìn)制

[root@s146 ipcheck]# ./conversion.sh 2to10 1001
9
[root@s146 ipcheck]# ./conversion.sh 2to10 1003
參數(shù)2要求輸入二進(jìn)制數(shù)

2、十進(jìn)制轉(zhuǎn)換為二進(jìn)制

[root@s146 ipcheck]# ./conversion.sh 10to2 255
11111111
[root@s146 ipcheck]# ./conversion.sh 10to2 255A
參數(shù)2要求輸入十進(jìn)制整數(shù)

3、八進(jìn)制轉(zhuǎn)換為十進(jìn)制

[root@s146 ipcheck]# ./conversion.sh 8to10 71
57
[root@s146 ipcheck]# ./conversion.sh 8to10 81
參數(shù)2要求輸入八進(jìn)制字符

4、十進(jìn)制轉(zhuǎn)換為八進(jìn)制

[root@s146 ipcheck]# ./conversion.sh 10to8 59
73
[root@s146 ipcheck]# ./conversion.sh 10to8 591
1117
[root@s146 ipcheck]# ./conversion.sh 10to8 591A
參數(shù)2要求輸入十進(jìn)制整數(shù)

5、十六進(jìn)制轉(zhuǎn)換為十進(jìn)制

[root@s146 ipcheck]# ./conversion.sh 16to10 A
10
[root@s146 ipcheck]# ./conversion.sh 16to10 X
參數(shù)2要求輸入十六進(jìn)制字符
[root@s146 ipcheck]# ./conversion.sh 16to10 G
參數(shù)2要求輸入十六進(jìn)制字符
[root@s146 ipcheck]# ./conversion.sh 16to10 abc
2748

6、十進(jìn)制轉(zhuǎn)換為八進(jìn)制

[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、二進(jìn)制轉(zhuǎn)換為八進(jìn)制

[root@s146 ipcheck]# ./conversion.sh 2to8 1011
13
[root@s146 ipcheck]# ./conversion.sh 2to8 1011.
參數(shù)2要求輸入二進(jìn)制數(shù)

8、八進(jìn)制轉(zhuǎn)換為二進(jìn)制

[root@s146 ipcheck]# ./conversion.sh 8to2 31
11001
[root@s146 ipcheck]# ./conversion.sh 8to2 31a
參數(shù)2要求輸入八進(jìn)制字符

9、八進(jìn)制轉(zhuǎn)換為十六進(jìn)制

[root@s146 ipcheck]# ./conversion.sh 8to16 13
B
[root@s146 ipcheck]# ./conversion.sh 8to16 12
A
[root@s146 ipcheck]# ./conversion.sh 8to16 12c
參數(shù)2要求輸入八進(jìn)制字符

10、十六進(jìn)制轉(zhuǎn)換為八進(jìn)制

[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
參數(shù)2要求輸入十六進(jìn)制字符

11、禁止轉(zhuǎn)換參數(shù)輸入錯誤

Shell腳本之進(jìn)制轉(zhuǎn)換器如何實(shí)現(xiàn)

“Shell腳本之進(jìn)制轉(zhuǎn)換器如何實(shí)現(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI