如何在shell中检查ipv4地址。比如是 *.*.1.* 还是 *.*.0.*?

如何在shell中检查ipv4地址。比如是 *.*.1.* 还是 *.*.0.*?

所以在这里我尝试从 ifconfig 文件中获取,但与简单的 ifconfig 命令的错误相同

!#/bin/sh
if [/home/pi/ifconfig | grep -Eo ‘inet (addr:)?([0-9]*\.){3}[0-9]*’ | grep -Eo ‘([0-9]*\.){3}[0-9]*’ | grep -v ‘127.0.0.1’ = *.*.1.*]
then
echo “good1”
else
echo “notGood2”
fi

我得到的错误

test: 2: test: [/home/pi/ifconfig: not found
grep: =: No such file or directory
grep: *.*.1.*]: No such file or directory
notGood2

答案1

您可以用来ip addr显示主机上所有接口和子网的 IP 地址:

$ ip -f inet addr show | awk '$1 == "inet" { print $2 }'
127.0.0.1/8
192.168.0.2/24

如果您不关心子网,可以将其删除:

$ ip -f inet addr show | awk '$1 == "inet" { print $2 }' | cut -d/ -f1
127.0.0.1
192.168.0.2

根据评论,如果您出于某种原因只想查看 IP 地址的第三个八位字节是什么,这很简单:

# given this:
$ ip -f inet addr show | awk '$1 == "inet" { print $2 }'
127.0.0.1/8
192.168.25.2/24
# we can do this:
$ ip -f inet addr show | awk '$1 == "inet" { print $2 }' | cut -d. -f3
0
25

答案2

#!/bin/bash
for i in $(/sbin/ifconfig | grep inet | awk '{print $2}')
do
    if [[ $i  =~ ^[0-9]{1,3}\.[0-9]{1,3}\.1|0.[0-9]{1,3}$ ]]; then
    echo "$i good1"
    else 
    echo "$i notGood2" 
    fi
done

答案3

我找到了答案,我会解释 i = 1 因为它是

i=1
if [ $i = 1 ]; then
echo $i good1
else
echo $i notGood2
fi

这就是我想要的 无论如何,你们都帮助我得到了正确的答案!谢谢

相关内容