请提供建议 - 我的语法有什么问题?(不应该打印“坏界面”)
备注-我使用 bash shell
ETH_NAME=eth0 ( or any other as eth1 or eth2 .... )
echo $ETH_NAME
eth0
[ $ETH_NAME != eth[0-9] ] && echo bad interface
答案1
使用[[ ... ]]
可以进行模式匹配的复合命令!=
$ ETH_NAME=eth0
$ [[ $ETH_NAME != eth[0-9] ]] && echo bad interface
$ ETH_NAME=eth01
$ [[ $ETH_NAME != eth[0-9] ]] && echo bad interface
bad interface
答案2
或者使用标准(POSIX sh)case
语句而不是 ksh 的语句[[...]]
(在 bash 和 zsh 中也可以找到)。
case $ETH_NAME in
(eth[0-9]) ;;
(*) echo >&2 bad interface
esac
请注意,它会说 eth10 是一个坏接口。
你可以这样做
case $ETH_NAME in
(eth|eth*[!0-9]*) echo >&2 bad interface;;
(eth*) ;;
(*) echo >&2 bad interface
esac
(请注意,包括以太网在内的网络接口名称不限于ethx
)。
答案3
我最喜欢的匹配方式是case…esac
:
case "$ETH_NAME" in
eth[0-9]) ;;
*) echo 'bad interface' ;;
esac
因为它是快速地而且相当便携(不需要使用bash
)。我不能说可用的正则表达式子集case
很丰富,但通常已经足够了。