Contagem de script bash 5 minutos em exibição em linha única [closed]

20

Eu gostaria de ter uma contagem regressiva de 5 minutos, atualizando a cada segundo e mostrando o resultado na mesma linha. Isso é possível com o script Bash?

    
por ptheofan 21.08.2013 / 11:37

2 respostas

33

Isso funciona com o shell Bash:

secs=$((5 * 60))
while [ $secs -gt 0 ]; do
   echo -ne "$secs3[0K\r"
   sleep 1
   : $((secs--))
done

O caractere especial \ 033 [OK representa um fim de linha que limpa o restante da linha se houver caracteres remanescentes da saída anterior e \ r for uma retorno que move o cursor para o início da linha. Há um tópico interessante sobre esse recurso em stackoverflow.com .

Você pode adicionar comandos próprios ou o que quer que seja no loop while. Se você precisar de algo mais específico, forneça mais detalhes.

    
por 21.08.2013 / 11:45
12

Aqui está uma com uma melhoria do formato de saída correto (HH: MM: SS) com zeros iniciais adequados e horas de suporte:

#!/bin/bash

m=${1}-1 # add minus 1 

Floor () {
  DIVIDEND=${1}
  DIVISOR=${2}
  RESULT=$(( ( ${DIVIDEND} - ( ${DIVIDEND} % ${DIVISOR}) )/${DIVISOR} ))
  echo ${RESULT}
}

Timecount(){
        s=${1}
        HOUR=$( Floor ${s} 60/60 )
        s=$((${s}-(60*60*${HOUR})))
        MIN=$( Floor ${s} 60 )
        SEC=$((${s}-60*${MIN}))
     while [ $HOUR -ge 0 ]; do
        while [ $MIN -ge 0 ]; do
                while [ $SEC -ge 0 ]; do
                        printf "%02d:%02d:%02d3[0K\r" $HOUR $MIN $SEC
                        SEC=$((SEC-1))
                        sleep 1
                done
                SEC=59
                MIN=$((MIN-1))
        done
        MIN=59
        HOUR=$((HOUR-1))
     done
}

Timecount $m

Fornece uma saída assim:

02:04:15
    
por 21.08.2013 / 13:47

Tags