使用布尔表达式Bash脚本

使用布尔表达式Bash脚本,bash,boolean,Bash,Boolean,我正在尝试编写一个Bash脚本,用于计算两个地址的最小公共子网 理论上:我必须将IP从十进制更改为二进制,然后在两个IP上应用XNOR 我试着写下: #!/bin/bash echo "Ebter the first ip" read ip1 echo "Enter the second ip" read ip2 #Separate octs of first ip a1=`echo $ip1 | awk 'BEGIN{FS="."}{print $1}'` a2=`echo $ip

我正在尝试编写一个Bash脚本,用于计算两个地址的最小公共子网

理论上:我必须将IP从十进制更改为二进制,然后在两个IP上应用XNOR

我试着写下:

#!/bin/bash
echo "Ebter the first ip"
read ip1
echo "Enter the second ip"
read ip2  

#Separate octs of first ip  

a1=`echo $ip1 | awk 'BEGIN{FS="."}{print $1}'`
a2=`echo $ip1 | awk 'BEGIN{FS="."}{print $2}'`
a3=`echo $ip1 | awk 'BEGIN{FS="."}{print $3}'`
a4=`echo $ip1 | awk 'BEGIN{FS="."}{print $4}'`  
#convert decimal to binary

b1=`echo "obase=2;$a1" | bc`
b2=`echo "obase=2;$a2" | bc`
b3=`echo "obase=2;$a3" | bc`
b4=`echo "obase=2;$a4" | bc`  

#Separate octs of second ip

c1=`echo $ip2 | awk 'BEGIN{FS="."}{print $1}'`
c2=`echo $ip2 | awk 'BEGIN{FS="."}{print $2}'`
c3=`echo $ip2 | awk 'BEGIN{FS="."}{print $3}'`
c4=`echo $ip2 | awk 'BEGIN{FS="."}{print $4}'`  

#convert decimal to binary (second IP)

d1=`echo "obase=2;$c1" | bc`
d2=`echo "obase=2;$c2" | bc`
d3=`echo "obase=2;$c3" | bc`
d4=`echo "obase=2;$c4" | bc`

e1=`echo $b1 || $d1 | rev`
e2=`echo $b2 || $d2 | rev`
e3=`echo $b3 || $d3 | rev`
e4=`echo $b4 || $d4 | rev`

echo "$e1.$e2.$e3.$e4"    
我有两个问题:

  • 我需要将XNOR应用于二进制IP(逐位),但是如果某个特定位的结果变为零,我想停止操作,并使另一个位跟随零,也就是零

  • 我需要那个


  • 有人能帮我解决这个问题吗?

    首先,使用
    read
    将地址拆分为整数部分要简单得多

    IFS=. read a1 a2 a3 a4 <<< "$ip1"
    IFS=. read b1 b2 b3 b4 <<< "$ip2"
    

    首先,使用
    read
    将地址拆分为整数部分要简单得多

    IFS=. read a1 a2 a3 a4 <<< "$ip1"
    IFS=. read b1 b2 b3 b4 <<< "$ip2"
    

    谢谢你的回答,我想知道如果子网是224呢。你的脚本只适用于0或255。你能帮我完成我的脚本吗?因为我是bash的初学者,对我来说比较容易。谢谢这不是很好的测试,但是我得到了
    255.255.255.224
    地址
    192.0.2.4
    192.0.2.17
    。谢谢你的回答,我想知道子网是否是224。你的脚本只适用于0或255。你能帮我完成我的脚本吗?因为我是bash的初学者,对我来说比较容易。谢谢这不是很好的测试,但是我得到了地址
    192.0.2.4
    192.0.2.17
    255.255.224