Se você quiser todas as combinações possíveis, use:
for i in *.[Pp][Nn][Gg]; do
ou
shopt -s nocaseglob
for i in *.png; do
embora esse torne todos os globs de shell do seu script (ou seja, correspondências de arquivo curinga) não seja sensível a maiúsculas até que você execute shopt -u nocaseglob
.
Se você realmente quer apenas .PNG e .png (e não, por exemplo, .PnG ou .pnG), use
shopt -s nullglob
for i in *.png *.PNG; do
ou
for i in *.png *.PNG; do
[[ -e "$i" ]] || continue
... o motivo da verificação da existência de nulos de caracteres ou de existência é que, se você tiver apenas extensões em maiúsculas ou minúsculas, incluirá o padrão não correspondente na lista de arquivos, levando a um erro no corpo do loop. Tal como acontece com nocaseglob, você pode querer desativar a opção de shell nullglob depois (embora na minha experiência, ter o nullglob on geralmente é bom, especialmente em um script). Na verdade, eu prefiro considerar uma boa idéia usar o nocaseglob ou a verificação de existência para todos os arquivos como este, apenas no caso de não haver correspondência.