Contagem regressiva no terminal

Publicado por Fábio Berbert de Paula em 16/06/2020

[ Hits: 4.889 ]

Blog: https://fabio.automatizando.dev

 


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!

Outras dicas deste autor

Combinando os comandos head e tail

Otimizando Digitação no Terminal Bash

Contar e ordenar a quantidade de ocorrências de cada linha em um arquivo

Contador de linhas em consultas SQL

Como usar o xmodmap para mapear teclas

Leitura recomendada

Diferenciar usuários no Squid

Fazendo comparações no shell com números de ponto flutuante

Highlighting: Destacando Códigos Bash Script no Eclipse

Aulas Shell Script do zero - Parte 9

Habilitar Cgi-Shell no Apache2

  

Comentários
[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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts