UNIX Case语句中的模式匹配

时间:2017-03-15 15:15:37

标签: linux bash shell unix pattern-matching

我正在使用shell脚本,我需要区分 tar.gz gz | bz 等。

我首先提取文件的扩展名,然后尝试使用case匹配它,我的第一个案例是*tar*,它应该匹配其扩展名为tar的文件,因为可以使用相同的命令提取它们。

问题是我尝试匹配gz bz2等的下一组陈述。我需要一个匹配bzgz2的案例模式但同时也要检查扩展中是否有tar

我对shell模式匹配毫无头绪,并写了[!(tar).*(bz2|bz)$](请不要笑)

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

case按顺序处理,因此如果您首先查找tar个文件,则不应该转到下一个:

case "${word}" in
  *.tar* )
    #process tar
    :;; #break
  *.bz2|*.bz )
    #process bz2 and bz
    :;; #break
  * )
    #default
    :;;
esac