有没有一种优雅的方式来testingBASH脚本中的IP地址? 我可以做ifconfig和使用sed / awk来缩小IP,但我认为有一个更简单的解决scheme。
我的应用程序基本上是使用SSH / SCP脚本,当我在我的内部网,而我没有。 所以,我想要这种types的stream程
if IP=192.168.1.1 then do this else then do that
一些相当简单的事情,你可以修改以适应你的需求:
ip addr show dev eth0 | fgrep -q 'inet 192.168.1.1' if [ $? -eq 0 ]; then echo 'IP found' else echo 'IP not found' fi
编辑:忘了fgrep 🙂
如果您的Intranet连接与否有区别,
你可以用一个简短的ping或arp来检查一个已知的内部服务器IP。
如果IP无法响应,您可能会在Intranet之外。
可能会有轻微的故障(如服务器暂时closures)。
这些可以被允许(你错误地切换到互联网模式),
或者,进一步testing多个检查(通过不同的内部资源)。
这是对mikeB答案更多的评论,但评论不允许代码,所以我会张贴它作为答案:
你可以使用像grep这样的东西来find你要找的东西,比如
ip addr show dev eth0 | fgrep -q 'inet 192.168.1.1' if [ $? -eq 0 ]; then echo 'IP found' else echo 'IP not found' fi
这实际上可以简化摆脱testing([是testing的别名])退出状态,因为如果已经直接检查退出状态,这是testing如何通信,如果已经:
if ifconfig | fgrep -q 'inet 192.168.1.1' then echo "IP Found" else echo "IP Not found" fi
你可以通过case语句使用内置在大多数bourne shell中的正则expression式来进一步简化:
case $(ifconfig) in *"inet 192.168.1.1"*) echo "IP found" ;; *) echo "IP not found" ;; esac
一个(国际海事组织,更复杂,更容易失败)的方法是configuration您的DHCP客户端保存分配的IP地址到一个方便的文件的地方。
比如用dhclient,你可以在/etc/dhcp3/dhclient-enter-hooks.d/中放一个脚本来保存当前IP到一个文件,比如/var/run/current-IP.txt
那么你的其他脚本就可以捕获该文件来获得当前的IP。
这样做的问题是它只会告诉你什么时候你的IP地址是由dhcp最后分配的。 它实际上并没有告诉你现在你的IP地址。 他们可能是一样的,或者他们可能不一样。
ip addr show <DEVICE> | grep inet | grep -v inet6 | awk '{print $2}'
这应该输出你的IP,希望。 有可能是一个更优雅的方式来做到这一点,但是这样可以完成工作,不pipe优雅。
#!/bin/bash address="192.168.0.1" interface="eth0"
#!/bin/bash address="192.168.0.1" interface="eth0"
ip = $(ifconfig -a $ interface | awk -F:'/ inet / {print $ 2}'| head -n 1 | awk'{print $ 1}')
如果[$ {ip} == $ {address}]; 然后
#做一点事
科幻