UNIX Case语句中的模式匹配

我正在使用一个shell脚本,我需要区分tar.gzgz | bz

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

问题是下一组语句,我试图匹配gz bz2等。我需要一个匹配bzgz2的case模式,但同时也检查扩展中没有tar

我无法用shell模式匹配,写了这个[!(tar).*(bz2|bz)$] (请不要笑)

任何帮助将不胜感激。

case进程顺序,所以如果你首先查找tar文件,它不应该到下一个:

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