BASH检查变量中是否存在

时间:2011-11-01 20:07:06

标签: macos bash shell scripting ip-address

我正在开发一个用于映射网络驱动器的脚本。但是,如果计算机具有特定的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发布中列出的信息无效,因为它不起作用。

2 个答案:

答案 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