我正在制作像这样的bash脚本
if [ "if I am in local "]; then
ssh myuser@192.168.11
else
ssh myuser@myserver.com
fi
如果我在当地,我怎么能得到?
答案 0 :(得分:1)
一种可能性是测试192.168.11
是否可以ping通:
if ping -qc1 192.168.11 >/dev/null; then
ssh myuser@192.168.11
else
ssh myuser@myserver.com
fi
如果ping
收到来自192.168.11
的响应,则退出并返回代码为0(成功),并执行then
子句。如果未返回任何响应,则执行else
子句。
选项-c1
告诉ping
仅发送一个数据包。如果您的本地网络不可靠(不太可能),您可能需要发送多个数据包。
-q
选项告诉ping
稍微安静一点,但这并不重要,因为我们将其输出转储到/dev/null
。
请注意,IP地址通常使用4个值写入,而不是3:192.168.11
中可能缺少一个数字。
来自man ping
:
如果ping没有收到任何回复数据包,它将退出 代码1.如果指定了数据包计数和截止日期,则更少 在截止日期到来之前收到的数据包数量, 它也将以代码1退出。在其他错误上,它将退出代码 2.否则它以代码0退出。这使得可以使用退出代码来查看主机是否存活。
答案 1 :(得分:1)
这适用于假设,然后以10,127,197,172开头的IP地址是专用网络的保留IP。
myIp=$(hostname -I) # or i based on your version.
echo $myIp |grep -q -P '(^127\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)'
if [ "$?" -eq 0 ];then
echo "Private Network"
else
echo "Over Internet"
fi
来自Here的灵感。