Bash:尝试通过函数获取公共 IPv6

问题描述 投票:0回答:1

我试图查看我的公共 IPv6 中是否有任何内容,如果没有,则在变量中输出文本“未知”(用于存储)。然后在文本中稍后显示变量,例如:

echo "Public IPv6: "$PIP6
(要保存的变量)。

我知道我没有公共 IPv6(在我的国家/地区进展缓慢),所以我希望它显示“未知”。 但它是空的。

问题出在哪里?

测试.sh

#!/bin/bash
OS="$(uname)"
InternalIP=""
LIP="ip addr show"
LIP6="ip -6 addr show scope global"
IPv6=""
PIPv6=""

case $OS in
 *)InternalIP=$($LIP | grep 'inet'| grep -v '127.0.0.1' | cut -d: -f2 | awk 'NF>0{print $2}');;
esac
case $OS in
 *)IPv6=$($LIP | grep 'inet6' | grep -v '128' | awk '{print $2}');;
esac
case $OS in
 *)PIPv6=$($LIP6 | grep 'inet6' | grep -v '128' | awk '{print $2}');;
esac
   if [ -z $PIPv6 ]; then
    echo $PIPv6
   else
    echo "Unknown"
   fi

length=$InternalIP
echo $InternalIP | awk '{print substr($0, 1, length($0)-3)}'
echo $IPv6 | awk '{print substr($0, 1, length($0)-3)}'
echo "Public IPv6: "$PIPv6

我尝试了不同的风格。尝试使用

echo "Unknown
而不是结果,然后它显示为未知,但我希望它保存到变量,而不是显示在输出的开头:

Unknown
1xx.xxx.xxx.xxx
xxxx::xxxx:xxxx:xxxx:xxx
Public IPv6: 
linux bash function
1个回答
0
投票

尝试这个,未经测试:

#!/usr/bin/env bash

InternalIP=""
lip() { ip addr show; }
lip6() { ip -6 addr show scope global; }
IPv6=""
PIPv6=""

InternalIP=$(lip | awk -F':' '/inet/ && !/127.0.0.1/ && split($2,a," ")>1{print a[2]}')
IPv6=$(lip | awk '/inet6/ && !/128/{print $2}')
PIPv6=$(lip6 | awk '/inet6/ && !/128/{print $2}')

if [ -n $PIPv6 ]; then
    echo "$PIPv6"
else
    echo "Unknown"
fi

echo "$InternalIP" | awk '{print substr($0, 1, length($0)-3)}'
echo "$IPv6" | awk '{print substr($0, 1, length($0)-3)}'
echo "Public IPv6: $PIPv6"

我不明白你的一些代码,并且你没有提供 2 个

ip
命令的输出,所以我不知道你为什么要使用你所使用的命令,所以上面只是翻译你的代码变成了我认为你想要它做的事情。

最显着的变化可能是当我认为你在

-z
语句中指的是
-n
时,你使用了
if

© www.soinside.com 2019 - 2024. All rights reserved.