Contagem regressiva no terminal

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

[ Hits: 4.393 ]

Blog: https://www.instagram.com/alexabolada/

 


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 fazer o logrotate apagar logs antigos

Como recortar um vídeo via linha de comando

Como validar arquivos RSS via linha de comando

Conferência Internacional Software Livre Brasil

Como remover arquitetura i386 no Debian/Ubuntu e derivados

Leitura recomendada

Negação Condicional no IF

cut - Comando com exemplos

Pacman colorido no Arch Linux

E-book GRATUITO de Shell Script do Júlio Neves

awk/gawk - Vídeo tutorial

  

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