Vc usa um par de parênteses desnecessários envolvendo o seu loop. Para o Shell, parênteses servem para criar um sub-shell (
veja seu uso aqui). Qdo esse subshell morre, leva junto com ele todas as alterações feitas no ambiente.
Mais algumas observações:
Veja essa linha:
PROGRESSO=$(echo "(${CONTADOR}*100)/${LOOP}" | bc)
1 - Evite usar variáveis em letras maiúsculas. Todas as variáveis do sistema são em letras maiúsculas e pode ser que vc use uma sem se tocar e este é um erro muito chato de ser descoberto (já vi isso ocorrer diversas vezes);
2 - O uso de chaves para abraçar variáveis é desnecessário, dificulta a leitura e torna a interpretação mais lenta;
3 - Procure sempre usar o que o Bash te dá, isso otimiza e muito o seu prg. Troque o bc pela aritmética do Shell. Eu faria essa linha assim:
Progresso=$((Contador*100)/Loop))
Só para vc ter uma ideia, faça um loop 200 vezes com a sua linha e com a minha, só para medir tempo. Coie e cole esses 2 blocos e compare os tempos
time for ((Contador=1; Contador < 200; Contador++))
{
PROGRESSO=$(echo "(${CONTADOR}*100)/${LOOP}" | bc)
}
time for ((Contador=1; Contador < 200; Contador++))
{
Progresso=$((Contador*100)/Loop))
}
Tem muito mais coisa que pode ser melhorado inclusive se eu fosse vc, trocaria o zenity pelo yad e usaria a opção --multi-progress, com uma barra para progresso de cada arquivo e outra para o progresso total. A sintaxe é a mesma, mas vc pode identificar para qual barra vc está mandando os echo (de progresso e de #texto)