【发布时间】:2017-01-21 22:22:27
【问题描述】:
我正在制作这样的 bash 脚本
if [ "if I am in local "]; then
ssh myuser@192.168.11
else
ssh myuser@myserver.com
fi
如果我在本地,我怎么能得到?
【问题讨论】:
标签: bash
我正在制作这样的 bash 脚本
if [ "if I am in local "]; then
ssh myuser@192.168.11
else
ssh myuser@myserver.com
fi
如果我在本地,我怎么能得到?
【问题讨论】:
标签: bash
一种可能性是测试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 退出。这使得可以使用退出代码来查看主机是否处于活动状态。
【讨论】:
这适用于假设以 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 的灵感。
【讨论】:
hostname -I , I 大写