Contagem regressiva no terminal

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

[ Hits: 5.641 ]

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

Como suprimir a emissão de luz azul da tela via linha de comando

PornView, o visualizador de imagens

Como checar se sua placa possui sinal físico de rede

Obtendo a cotação do Bitcoin com SED

iptables - Como apagar uma regra NAT

Leitura recomendada

Como somar todos os números contidos num arquivo texto

Comando para envio de dados via console para outro console

Apagar linhas comentadas de arquivos

Criando e utilizando uma "biblioteca de funções"

Dica para automatizar suas tarefas diárias [Iniciante]

  

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