Pular para o conteúdo

Contagem regressiva no terminal

Dica publicada em Shell Script / Introdução
Fábio Berbert de Paula fabio
Hits: 5.972 Categoria: Shell Script Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar

Contagem regressiva no terminal

Nesta dica veremos como implementar uma função em shell script para contagem regressiva que é um luxo!

Bom, na forma tradicional, quando queremos fazer com que o terminal aguarde um determinado tempo antes de executar um comando usamos o "sleep". Por exemplo, para aguardar 1 hora antes de liberar o terminal usaríamos:

sleep 1h

Apesar de tradicional, o sleep é bem limitado. Você não consegue saber quanto tempo falta para a instrução terminar.

Então vamos usar shell script para implementar uma instrução de contagem regressiva amigável. Edite o teu arquivo ~/.bash_profile e adicione o seguinte código:

vim ~/.bash_profile

regressiva() {

        #forma de uso:
        #regressiva HH:MM:SS. Exemplo:
        #
        #regressiva 01:30:00
        #

        #verificar se o parâmetro passado está correto
        RETORNO=`echo $1 | sed -E 's/[0-9]{2}:[0-9]{2}:[0-9]{2}/true/'`

        #se parâmetro estiver errado, imprimir mensagem de ajuda e sair
        if [ "$RETORNO" != "true" ]
        then
            echo -e "\nForma de uso:\n\n\tregressiva HH:MM:SS\n\nExemplo:\n\n\tregressiva 01:00:00\n\n"
            return
        fi

        #armazenar valor original da variável de ambiente IFS
        local OLD_IFS="${IFS}"

        #IFS passa a ser ":"
        IFS=":"

        #variável ARR terá 3 elementos: hora, min, seg
        local ARR=( $1 )

        #variável SECONDS será a soma dos segundos de todos os elementos
        local SECONDS=$((  (ARR[0] * 60 * 60) + (ARR[1] * 60) + ARR[2]  ))

        #contagem inicial é a hora atual em segundos
        local START=$(date +%s)

        #contagem final é a hora atual em segundos + a qtd de segundos informada
        local END=$((START + SECONDS))

        #inicializar a hora atual
        local CUR=$START

        while [[ $CUR -lt $END ]]
        do
                #atualizar a hora atual
                CUR=$(date +%s)

                #LEFT é quanto falta, END - CUR
                LEFT=$((END-CUR))

                #imprimir quanto falta no formato HH:MM:SS
                printf "\r%02d:%02d:%02d" \
                        $((LEFT/3600)) $(( (LEFT/60)%60)) $((LEFT%60))

                sleep 1
        done

        #restaurar a IFS
        IFS="${OLD_IFS}"
        echo "        "
}

Faça um load da função que acabamos de criar:

source ~/.bash_profile

E agora experimente:

regressiva

Para uma contagem regressiva de 1 hora, 5 minutos e 10 segundos:

regressiva 01:05:10

Até a próxima!

Mais um portal para a comunidade Linux

Vim - como executar uma linha do texto no terminal

Monitorando caixas postais com o wmbiff

Vim - configuração de acordo com o tipo de arquivo

Configurando Winmodens no Linux

Multitail - Monitore vários logs em tempo real

Aulas Shell Script do zero - Parte 1

Alterar a cor que os arquivos são listados no terminal

Criando item no menu do GNU/Linux com terminal executando comandos/scripts/aplicações

Problemas de permissões no Nautilus? A solução!

#1 Comentário enviado por maurixnovatrento em 16/06/2020 - 13:07h

Ficou top de linha.

___________________________________
Conhecimento não se Leva para o Túmulo.

Contribuir com comentário

Entre na sua conta para comentar.