2017-03-15 62 views
2

我在我需要的tar.gzGZ區分一個shell腳本工作| BZ格局UNIX Case語句匹配

我第一次提取文件的擴展名和然後嘗試使用case來匹配它,而我的第一種情況是*tar*,它應該在其擴展名中與tar匹配文件,因爲它們可以用相同的命令提取。

的問題是下一組語句的地方我想匹配gzbz2等。我需要它匹配bz或但同時也會檢查是否存在是在擴展沒有tar的情況下模式。

我無能與外殼模式匹配和寫這[!(tar).*(bz2|bz)$](請不要笑)

任何幫助將不勝感激。

+1

'$'是正則表達式的語法,'*焦油*'是水珠(殼)語法。 'case'使用glob語法。爲了在glob中使用'!',你必須啓用'extglob'。 爲什麼你使用括號? –

+0

@LaurentG我不知道如何繼續。試圖混合正則表達式,失敗。 – philantrovert

回答

2

case流程順序,因此,如果您尋找tar文件首先,它不應該去下一個:

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

只是';;'會做,而不是':;;'對嗎? – codeforester

+0

正確,':'只是總是'true'語句,這是爲了避免錯誤的命令丟失......不確定它實際上是相關的。 – jraynal

+0

感謝您的解釋。 – philantrovert