Contagem regressiva no terminal

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

[ Hits: 4.860 ]

Blog: https://mestrefabio.com

 


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 editar arquivos remotos usando o Vim

bc - Como passar parâmetros via linha de comando para a calculadora

Como escrever em arquivos protegidos usando o sudo e redirecionamento

Conheça o comando look

Docker: container Debian sem o comando "ps" (bash: ps: command not found) [Resolvido]

Leitura recomendada

Habilitar Cgi-Shell no Apache2

awk/gawk - Vídeo tutorial

explainshell.com

Aulas Shell Script do zero - Parte 1

Shell Script no Eclipse - It is possible!

  

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