shell脚本中的字符串匹配

时间:2013-09-16 08:33:50

标签: shell sh

for interfacefile in `ls /etc/sysconfig/network-scripts/ifcfg-eth*`

我在shell脚本中有以下for循环。现在

ls /etc/sysconfig/network-scripts/ifcfg-eth*
/etc/sysconfig/network-scripts/ifcfg-eth0  /etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network-scripts/ifcfg-eth0.0  /etc/sysconfig/network-scripts/ifcfg-eth1:1

问题是我只想要普通的以太网...不像ifcfg-eth0.0ifcfg-eth1:1 这种类型的逗号以及DOT分隔的字符串。

3 个答案:

答案 0 :(得分:1)

ls /etc/sysconfig/network-scripts/ifcfg-eth[0-9]这样的东西不够吗?

答案 1 :(得分:0)

你可以这样做:

# enable extender pattern matching
shopt -s extglob

for interfaceFile in /etc/sysconfig/network-scripts/ifcfg-eth+([0-9])

请注意,此处不需要ls。 shell将扩展文件名。

答案 2 :(得分:0)

POSIX shell的可移植方式:

for if in /etc/sysconfig/network-scripts/ifcfg-eth*; do
    [ -e "${if}" ] || continue
    if=${if##*/ifcfg-}
    case ${if#eth} in
        *[!0-9]*) continue ;;
    esac
    echo "${if}"
done

这将为您提供接口名称(例如eth0eth1,...),如果您真的在配置文件的完整路径之后相应地调整变量名称。