3

我试图让用户只输入一个有效的 mac 地址(即 0a:1b:2c:3d:4e:5f),并希望它比扩展形式更简洁:

[[ $MAC_ADDRESS =~ [a-zA-Z0-9][a-zA-Z0-9]:[a-zA-Z0-9][a-zA-Z0-9]:[a-zA-Z0-9][a-zA-Z0-9]:[a-zA-Z0-9][a-zA-Z0-9]:[a-zA-Z0-9][a-zA-Z0-9] ]]

有没有办法做到这一点?

[[ $MAC_ADDRESS =~ ([a-zA-Z0-9]{2}:){5}[a-zA-Z0-9]{2} ]]

本质上,我想创建一个由两个字母数字字符和一个冒号组成的“组”,然后重复五次。我已经尝试了我能想到的一切,我很确定这样的事情是可能的。

4

2 回答 2

8

我建议使用^$确保没有其他东西:

[[ "$MAC_ADDRESS" =~ ^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$ ]] && echo "valid" || echo "invalid"

编辑:要在 BASH ver 上使用正则表达式,3.1您需要引用正则表达式,因此以下应该有效:

[[ "$MAC_ADDRESS" =~ "^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$" ]] && echo "valid" || echo "invalid"
于 2013-11-13T16:52:08.897 回答
2

实际上,您非常接近您的建议。与其从 A 到 Z,不如从 A 到 F。

^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$
于 2013-11-13T16:52:55.363 回答