我正在开发一个用于映射网络驱动器的脚本。但是,如果计算机具有特定的IP地址,我们只想尝试映射驱动器。下面列出的是我们正在尝试使用的代码段。
#!/bin/sh
IP="dig $HOSTNAME +short"
if [ $IP == *10.130.10.* ]; then
mount drive commands here
fi
if [ $IP == *10.130.11.* ]; then
mount drive commands here
fi
我无法检查IP是否正常工作。有没有更好的方法来检查变量是否包含字符串,在这种情况下是IP地址的一部分?
this发布中列出的信息无效,因为它不起作用。
答案 0 :(得分:3)
你在问题上有一个“bash”标签,但shebang说/ bin / sh。你真的想用哪个?
实际上,首先要做的事情。您设置IP的方式不起作用,因为它从不运行dig命令;你需要反引用或$( )
来做到这一点:
IP="$(dig $HOSTNAME +short)"
现在,进行测试;有很多方法可以做到这一点。这适用于所有shell:
case "$IP" in
*10.130.10.*)
mount drive commands here
;;
*10.130.11.*)
mount drive commands here
;;
esac
请注意,如果两个子网的mount命令相同,则可以使用*10.130.10.*|*10.130.11.*)
作为匹配的模式。
如果你实际上正在使用bash,你可以使用它的[[ ]]
条件表达式来完成匹配,就像你拥有它一样:
if [[ "$IP" == *10.130.10.* ]]; then
mount drive commands here
elif [[ "$IP" == *10.130.11.* ]]; then
mount drive commands here
fi
如上所述,如果mount命令相同,则可以使用if [[ "$IP" == *10.130.10.* || "$IP" == *10.130.10.* ]]; then
执行单个条件。另外,$IP
周围的双引号在这种特殊情况下实际上并不是必需的,但我总是养成双引号变量的习惯,除非有理由不这样做。
答案 1 :(得分:1)
[[ "${IP/10.130.10./}" = "$IP" ]] || mount