パターン照合演算子%を使えばよい。以下は拡張子を1つ、2つ取り除く例。シェル変数stに拡張子を含むファイル名のような文字列を代入して試している。
$ st=a.bc.def.ghij
$ echo ${st%.*}
a.bc.def
$ echo ${st%.*.*}
a.bc
パターン照合演算子%は一致する最小部分を削除した文字列を返す。一方で、パターン照合演算子%%は、一致した最長部分を削除した文字列を返す。拡張子をすべて削除したいのであれば、こちらを使うと便利。
$ st=a.bc.def.ghij
$ echo ${st%%.*}
a