Pode ser tão simples quanto
cp file.{ext,bak.ext}
A expansão do bash {} se expande para todas as combinações (ao contrário da [[] expansão que lista os arquivos existentes. Por isso, gera dois nomes de arquivos.
O {...., ....} oferece duas opções, para que você obtenha file.ext e file.bak.ext
No seu script você usaria
cp $FILE.{$EXTENTION,bak.$EXTENTION}
E para dividir o FILENAME nas duas metades, você pode usar
FILE=${FILENAME%.*}
EXTN=${FILENAME##*.}
$ {VAR% xxxxx} retornará o lado esquerdo do que está em VAR até o padrão correspondente, no caso acima do padrão. * para que você obtenha tudo, exceto o último. *
$ {VAR ## xxxxx} retornará o lado direito do que está em VAR, após o padrão correspondente. O hash duplo significa obter a maior correspondência possível, caso haja mais de uma correspondência possível.
Para fazer seu script salvar, verifique os casos em que após obter FILE e EXTENTION, eles não são a mesma coisa. Isso acontecerá nos casos em que o nome do arquivo não tiver uma extensão.
Uma subseção do seu script pode ter esta aparência:
ls *html | while read FILENAME
do
FILE=${FILENAME%.*}
EXTN=${FILENAME##$FILE}
cp $FILE{$EXTN,.bak$EXTN}
done