duvida simples [RESOLVIDO]

1. duvida simples [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 14/05/2008 - 01:18h

estou criando um contados de tempo para operacionalizar um trabalho na facul.

to usando o sed pra fazer a edição dos documentos por min só que eu naum consegui fazer um if que contasse de 01 pra 02 ,03 04...
só conta assim 1,2,3,4...

como eu faço isso?pq sempre q uso um if
if [ $dia = 1 ] ; then
dia = 01

se eu fizer isso ele aribui a variavel dia sempre com 01 e dessa forma naum retorna ao inicio do 1° if do script pq a variavel dia sempre fica como 01


  


2. Re: duvida simples [RESOLVIDO]

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 15/05/2008 - 11:12h

Poderia postar o código do seu script?


3. Re: duvida simples [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 15/05/2008 - 14:51h

#!/bin/sh
# contador
clear

ano=2010
mes=12
dia=01
hora=00
min=00


until [ $ano -gt 2020 ];
do

for x in $(seq 5);
do
min=$(($min+15))

if [ $min -ge 60 ]; then
min=$(($min-60))
hora=$(($hora+1))
fi

if [ $hora -gt 23 ]; then
hora=$(($hora-24))
dia=$(($dia+01))
elif [ $hora -eq 24 ]; then
hora=00
dia=$(($dia+01))
fi

if [ $mes = 1 ] || [ $mes = 3 ] || [ $mes = 5 ] || [ $mes = 7 ] || [ $mes = 8 ] || [ $mes = 10 ] || [ $mes = 12 ] && [ $dia -gt 31 ]; then
dia=$(($dia-31))
mes=$(($mes+01))

elif [ $mes = 4 ] || [ $mes = 6 ] || [ $mes = 9 ] || [ $mes = 11 ] && [ $dia -gt 30 ]; then
dia=$(($dia-30))
mes=$(($mes+01))

elif [ $mes = 2 ] && [ $ano = 2008 ] || [ $ano = 2012 ] || [ $ano = 2016 ] || [ $ano = 2020 ] && [ $dia -gt 29 ]; then
dia=$(($dia-29))
mes=$(($mes+01))

elif [ $mes = 2 ] && [ $dia -gt 28 ]; then
dia=$(($dia-28))
mes=$(($mes+01))
fi

if [ $mes -gt 12 ]; then
mes=$(($mes-12))
ano=$(($ano+01))
fi


echo $ano $mes $dia $hora $min

done
done



com esse codigo ele escreve a data no formato ano;mes;dia;hora;minuto

porem qiando a data for 2008 10 25 12 30 ele vai escrever 200810251230
porem qiando a data for 2008 08 05 09 15 ele vai
escrever 200885915

eu preciso que ele escreve o zero a esquerda dos numeros menores que 10

tem algum tipo de escale que possa ser usado ?


4. Re: duvida simples [RESOLVIDO]

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 15/05/2008 - 15:03h

Ao inves de:
dia=$(($dia+01))

Faça:
dia=`printf %02d $(($dia+01))`

BINGO


5. E CUIDADO!

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 15/05/2008 - 15:06h

Para o shell, numeros que começam com ZERO são formato OCTAL!!

echo $(( 08 + 1))
bash: 08: valor muito grande para a base (error token is "08")

08 não existe em octal!

Sugiro que faças TODAS AS OPERAÇÕES matemáticas sem o zero e somente na hora de usar:

dia = `printf %02d $dia`



6. Re: duvida simples [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 16/05/2008 - 18:43h

realmente estou tendo problema com o 08, mas vou fazer como vc disse fazer as contas e depois aplicar a sua dica

valeu pela força


7. Re: duvida simples [RESOLVIDO]

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 17/05/2008 - 16:31h

Se possível, converta as saídas para ecoá-las em forma de strings.
Pode não ser muito elegante, mas funciona.

Por exemplo, se a saída for igual ou menor que 9 então a string será '0' mais a string.

Isso funciona na maioria das linguagens.

Você irá gastar processamento extra apenas na formatação de saída e não necessariamente a cada passo do loop.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts