1

我需要有关如何将 bash 变量与特定格式进行比较的帮助。

我将使用读取命令读取用户输入

for example:
MyComputer:~/Home$ read interface
eth1
MyComputer:~/Home$ echo $interface
eth1

现在我需要检查是否带有 IF 循环的“$interface”变量(它的开头应该有“eth”并且应该包含数字 0-9):

if [[ $interface=^eth[0-9] ]]
then
    echo "It looks like an interface name"
fi

提前致谢

4

3 回答 3

3

您可以为此使用正则表达式:

if [[ $interface =~ ^eth[0-9]+$ ]]
then
  ...
fi
于 2013-11-09T16:37:49.087 回答
1

您可以为此使用 bash 的 glob:

if [[ $interface = eth+([[:digit:]]) ]]; then
    echo "It looks like an interface name"
fi

(避免使用正则表达式可以解决一个问题)。哦,注意=标志周围的空格,以及之前和之后[[and ]]

于 2013-11-09T17:39:38.473 回答
0

=~正如 Andrew Logvinov 所说,您可以使用 bash V3+ 运算符:

[[ $interface =~ ^eth[0-9]+$ ]] && # ...

或者 :

if [[ $interface =~ ^eth[0-9]+$ ]]; then
    # ...
fi

否则,您也可以使用egrepor grep -E(这对于像 sh ... 这样的旧 shell 很有用):

echo "$interface"|egrep "^eth[0-9]+$" > /dev/null && # ...

或者 :

if echo "$interface"|egrep "^eth[0-9]+$" > /dev/null; then
    # ...
fi
于 2013-11-09T17:31:41.227 回答