'Julio C. Neves' julio.neves@gmail.com [shell-script]
2016-12-23 12:12:40 UTC
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
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.
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.