请指教 – 我的语法有什么问题? (不应该打印“糟糕的界面”)
ETH_NAME=eth0 ( or any other as eth1 or eth2 .... ) echo $ETH_NAME eth0 [ $ETH_NAME != eth[0-9] ] && echo bad interface
使用可以与!=进行模式匹配的[[ ... ]]复合命令
$ ETH_NAME=eth0 $ [[ $ETH_NAME != eth[0-9] ]] && echo bad interface $ ETH_NAME=eth01 $ [[ $ETH_NAME != eth[0-9] ]] && echo bad interface bad interface
或者使用标准的(POSIX sh) case语句而不是ksh的[[...]] (也可以在bash和zsh中find)。
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
(请注意,包括以太网在内的networking接口名称不限于ethx )。
我最喜欢做这种匹配的方式是case…esac :
case "$ETH_NAME" in eth[0-9]) ;; *) echo 'bad interface' ;; esac
因为它速度快而且便于携带(不需要使用bash )。 我不能说可用于case正则expression式的子集是一个丰富的正则expression式,但通常是足够的。