あくまでも、ファイル名から拡張子を判断するだけ。



以下に、$filenameとして与えられたファイルが拡張子.gzを持つかどうかを確認するシェルスクリプトのサンプルを示す。



Caseを使うケース。



非常に素直。
#!/bin/sh
case "$filename" in
*\.gz)
echo "Found .gz suffix"
;;
*)
echo "Not a .gz suffix"
;;
esac
basenameを使うケース。
#!/bin/sh
# `basename $filename .gz` returns `basename $filename`
# *unless*  it has a .gz suffix.
[ `basename $filename .gz` = `basename $filename` ] || {
echo $filename has a .gz suffix
}
そもそもbasenameは、与えられた文字列からディレクトリ名を削除し、ファイル名部分を抜き出すコマンド。



第二引数として拡張子を与えると、文字列からはその拡張子も削除される。



これを逆に利用している。



つまり、$filenameが.gzという拡張子をもって*いない*場合、`basename $filename .gz`の結果は、`basename $filename`と等しい。