Discussion:
[shell-script] Contagem de tempo em background
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2016-12-23 12:12:40 UTC
Permalink
Eu vi que seu script já funcionava, então só dei uma guaribada, para
torná-lo mais veloz, mas quero fazer umas observações:

Pela construção do seu script, creio que vc está o rodando sob UNIX, se
assim for, troque #!/bin/bash por #!/bin/ksh. O /bin/sh no Linux é o que
existe de pior na face da terra e não tem nada a ver com o /bin/sh, que é
Bourne Shell do UNIX;

Em nome da portabilidade, dê preferencia ao echo -n em detrimento do echo
...\c, pois esse último para funcionar em Linux, precisa ser echo -e ..../c;

Eu sempre aconselho a não usar nomes de variáveis com letras maiúsculas. Se
vc não fizer isso, é muito provável que mais cedo ou mais tarde vc usará,
sem querer, o nome de uma variável de sistema no seu script, gerando erros
de lógica dificílimos de serem detectados;

No lugar onde botei um sleep 10, poderia ter o restante do seu programa,
que seria executado simultaneamente com a contagem;

Antigamente os terminais burros tinham uma linha de status que normalmente
eram vermelhas ou verdes. Simulei uma.

Aí vai o código:

#!/bin/bash
Lin=$(tput lines)
Col=0
Tempo=5
Flg=
tput cup $Lin 0
tput setab 1 # background vermelho
tput ed
echo -n TEMPO RESTANTE:
until ((Flg))
do
tput cup $Lin 22
echo -n $Tempo
let Tempo-=1 # cmd let é muito veloz
if ((Tempo < 0))
then
sleep 1
tput cup $Lin 0
echo -n "O TEMPO ACABOU"
tput setab 9 # Restaura background default
tput ed
Flg=1
fi
sleep 1
done &
sleep 10


Abcs,
Julio

*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas. P. exemplo:

*Shell* básico e Programação em *Shell* Julio Neves
*Bacula* Heitor Medrado
*Zabbix* Adail Host
Falae pessoal,
Bem, estou criando um script para contagem de tempo fazendo uso do
tput. A ideia é que o script mostrasse a mensagem de tempo no final da tela
(rodando em background), mas que pudesse liberar o shell na parte de cima
para que o usuário pudesse fazer outras coisas e quando a contagem
encerrar, finalizaria com outra mensagem de fim. Sei que é possível dividir
a tela com o tput, mas não sei como fazer. Há alguma forma de liberar o
shell para o usuário, enquanto a mensagem é mostrada no final da tela? Ou
seja, limitaríamos uma pequena parte da tela para a mostragem das
mensagens, enquanto a parte de cima do shell ficaria liberada para o
#!/bin/sh
LIN="`tput lines`"
COL=0
TEMPO=5
flag="0"
while [ "$flag" -eq "0" ]
do
tput ed
tput cup $LIN 0
echo "TEMPO RESTANTE: \c "
tput cup $LIN 22; echo "$TEMPO\c"
TEMPO=$(($TEMPO-1))
if [ $TEMPO -lt 0 ]
then
sleep 1
tput ed
tput cup $LIN 0
echo "O TEMPO ACABOU\c"
tput ed
flag="1"
fi
sleep 1
done &
Abraço a todos,
Junior.
jrsreis@yahoo.com.br [shell-script]
2016-12-22 23:24:35 UTC
Permalink
Olá Itamar,


Obrigado pela dica. Darei uma olhada sim. Qualquer coisa eu retorno.


Um forte abraço,
Júnior.
jrsreis@yahoo.com.br [shell-script]
2016-12-26 12:27:36 UTC
Permalink
Olá grande mestre Júlio,

Bem, sobre o script de contagem, sim, ele já estava funcionando, mas não da forma que eu gostaria. A ideia é executá-lo em um espaço reservado da tela, e liberasse o shell para que o usuário pudesse trabalhar na parte liberada para ele, entendeu? O amigo Itamar enviou uma dica de um script que mostra a data em uma parte da tela, eu ainda não vi. Hoje estarei dando uma olhada para ver como funciona para ver se posso aproveitar algo para esse script.

O script está sendo sendo executado no GNU/Linux Debian.

Agradeço pela garibalda e também pelas observações super ricas. Aproveitando as observações, gostaria de fazer uma pergunta:
Por que que os scripts de inicialização no GNU/Linux Debian utilizam o /bin/sh e não o /bin/bash? Não poderiam utilizar esse último?

Mais uma vez obrigado pela atenção.

Um forte abraço,
Júnior
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2016-12-26 17:24:09 UTC
Permalink
Fala Junior,
90% dos scripts de inicialização do UNIX/LINUX, foram escritos na época que
só existia o Bourne Shell. Aí eu pergunto: mexer para que? Não se mexe em
time que está ganhando... ;)

Abcs,
Julio

*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas. P. exemplo:

*Shell* básico e Programação em *Shell* Julio Neves
*Bacula* Heitor Medrado
*Zabbix* Adail Host
Post by ***@yahoo.com.br [shell-script]
Olá grande mestre Júlio,
Bem, sobre o script de contagem, sim, ele já estava funcionando, mas não
da forma que eu gostaria. A ideia é executá-lo em um espaço reservado da
tela, e liberasse o shell para que o usuário pudesse trabalhar na parte
liberada para ele, entendeu? O amigo Itamar enviou uma dica de um script
que mostra a data em uma parte da tela, eu ainda não vi. Hoje estarei dando
uma olhada para ver como funciona para ver se posso aproveitar algo para
esse script.
O script está sendo sendo executado no GNU/Linux Debian.
Agradeço pela garibalda e também pelas observações super ricas.
Por que que os scripts de inicialização no GNU/Linux Debian utilizam o
/bin/sh e não o /bin/bash? Não poderiam utilizar esse último?
Mais uma vez obrigado pela atenção.
Um forte abraço,
Júnior
Continue reading on narkive:
Loading...