Pular para o conteúdo

Substituindo o sleep por um belo cronômetro regressivo

Dica publicada em Shell Script / Avançado
Fábio Berbert de Paula fabio
Hits: 9.216 Categoria: Shell Script Subcategoria: Avançado
  • Indicar
  • Impressora
  • Denunciar

Substituindo o sleep por um belo cronômetro regressivo

Hoje me deu vontade de embelezar meu shell script. O programa faz algumas pausas agendadas com o comando sleep antes de seguir para novas tarefas. O problema, é que o comando sleep simplesmente congela a tela e nunca sabemos quanto tempo falta exatamente para o seu fim.

Pesquisando na Internet, encontrei um belo script de cronômetro regressivo:

function countdown
{
        local OLD_IFS="${IFS}"
        IFS=":"
        local ARR=( $1 )
        local SECONDS=$((  (ARR[0] * 60 * 60) + (ARR[1] * 60) + ARR[2]  ))
        local START=$(date +%s)
        local END=$((START + SECONDS))
        local CUR=$START

        while [[ $CUR -lt $END ]]
        do
                CUR=$(date +%s)
                LEFT=$((END-CUR))

                printf "\r%02d:%02d:%02d" \
                         $((LEFT/3600)) $(( (LEFT/60)%60)) $((LEFT%60))

                sleep 1
        done
        IFS="${OLD_IFS}"
        echo "        "
}

countdown $1

Copie o código acima e salve-o no arquivo /usr/local/bin/countdown. Em seguida, torne-o executável:

sudo chmod a+x /usr/local/bin/countdown

Para executá-lo:

countdown 00:01:00

No exemplo acima, estou chamando a contagem regressiva de 1 minuto. Basta manter o formato hh:mm:ss para construir o tempo de cronometragem desejado.

A partir de agora, ao invocar pausa em meus scripts, ao invés de usar sleep, uso o countdown. Muito mais bonito!

Fonte: Display runnning countdown in a bash script? - The UNIX and Linux Forums

Como rodar vídeos de sites de streaming no Opera browser

O comando rename na prática

A melhor forma de apagar milhões de arquivos em servidores GNU/Linux

Agendando tarefas no cron com horário aleatório

Extraindo seu endereço IP com shell script (egrep + awk)

Criar lançador para o Grafix2

Script para verificar LOGs do Squid e selecionar páginas a serem bloqueadas

Exibir arquivo de grupos /etc/group de forma personalizada conforme o usuário

CGI + Shell Script: gerando listagem de IPs disponíveis em sua rede

Script para o netfilter (iptables)

#1 Comentário enviado por eldermarco em 21/08/2013 - 07:28h
Gostei. Vou passar a utilizar daqui pra frente. Muito boa ideia!
#2 Comentário enviado por will_drop em 03/01/2014 - 08:18h
Testei o script e não funcionou
#3 Comentário enviado por WillR10 em 08/01/2016 - 14:15h
Comigo também não funcionou.
Erro: /usr/local/bin/countdown: line 17: nbs: command not found
#4 Comentário enviado por fabio em 08/01/2016 - 14:45h

[3] Comentário enviado por WillR10 em 08/01/2016 - 14:15h

Comigo também não funcionou.
Erro: /usr/local/bin/countdown: line 17: nbs: command not found


Havia um resíduo de código HTML misturado com o código-fonte do script na dica. Corrigido! Pode copiar o código novamente e executar.

Contribuir com comentário

Entre na sua conta para comentar.