Boa tarde, estou tentando realizar um exercício de shell script, no qual eu tenho que desenvolver um script que exiba a estação do ano conforme a data do sistema, estou com bastante dificuldade pois sou iniciante no linux, e em shell etc. Alguém poderia me dizer o que tem de errado?
O problema não parece ser com o shell ou com o Linux, mas sim com os testes condicionais que você está usando. A sintaxe está correta, mas as condições lógicas estão erradas.
Eu tenho por hábito evitar entregar as respostas de bandeja, então vou dar algumas dicas em forma de pergunta.
• Existem meses que, uma vez identificados, dispensem o teste do valor do dia? Se existem, onde isso aparece no seu código?
• Para meses que contenham mais de uma estação, qual seria a forma certa de determinar qual delas deve ser apresentada?
Espero ter sido útil.
... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)
3. Re: Script das estações
msoliverusa Debian
Post recolhido
Enviado em 26/04/2020 - 21:06h
cadu405 escreveu:
Boa tarde, estou tentando realizar um exercício de shell script, no qual eu tenho que desenvolver um script que exiba a estação do ano conforme a data do sistema, estou com bastante dificuldade pois sou iniciante no linux, e em shell etc. Alguém poderia me dizer o que tem de errado?
Além do exposto pelo "Paulo1205",
Existem dias, nos quais ocorrem a "mudança" da Estação....
E, Depende do horário, a estação é diferente.....
Logo, deve-se considerar a Hora, minuto.....
Veja: https://www.iag.usp.br/astronomia/inicio-das-estacoes-do-ano
Para facilitar o condicional,
Eu utilizaria o "Unix Time stamp".
date +%s
.....
_____________________________________________________________________ Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________
4. código
cadu405usa Outra
Post recolhido
Enviado em 28/04/2020 - 15:59h
Tem alguma forma de fazer em que eu deixe as estações predefinidas ? do modo que estou fazendo não está dando certo.
5. Re: Script das estações
msoliverusa Debian
Post recolhido
Enviado em 28/04/2020 - 18:16h
cadu405 escreveu:
Tem alguma forma de fazer em que eu deixe as estações predefinidas ? do modo que estou fazendo não está dando certo.
Boa tarde Cadu.
Você deve comparar a DATA ATUAL com a DATA de INICIO da ESTAÇÃO
Fiz aqui, funciona a contento,
Para cada ESTAÇÃO, criei uma variável,
com o Unix Time Stamp.
Exemplo da var:
Outono=$(date -d"2020-03-diahora:minuto:00" +%s)
dia, hora e minuto, são obtidos do site: https://www.iag.usp.br/astronomia/inicio-das-estacoes-do-ano
Com o "lynx+filtros, baixo os dados do site citado:
cat dados.txt
O Usuário informa: ANO-MES-DIA hh:mm:,
Busco o ANO em dados.txt, gero as variáveis das estações,
e faço o condicional, comparando a data informada, com a das estações.....
______________________________________________________________________ Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________
6. Re: Script das estações
msoliverusa Debian
Post recolhido
Enviado em 29/04/2020 - 23:24h
Boa noite Cadu, e o script das estações do ano, consegui?
______________________________________________________________________ Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________
7. Re: Script das estações
paulo1205usa Ubuntu
Post recolhido
Enviado em 01/05/2020 - 16:04h
Que droga!
Eu havia escrito uma resposta relativamente longa condensando algumas informações que eu li a respeito de estações do ano, variações na duração observável do ano em função da data de referência e fatores astronômicos, duração média do ano, e outros assuntos que eu não conhecia mas acabei estudando em função deste tópico, mas, na hora de enviar a mensagem, o VoL pediu que eu fizesse login de novo, e, depois do login, caiu numa página de erro 404, e eu perdi tudo o que havia escrito!
Pior de tudo que esses erros são recorrentes, e eu ainda não criei o hábito de selecionar tudo e fazer um copy antes de enviar...
Na mensagem que eu escrevera, eu detalhara também um algoritmo que, dadas certas limitações de precisão decorrentes de fatores astronômicos que variam a cada ano, permite calcular com erro razoável (i.e. dentro de uma faixa de aproximadamente ±30min) as estações do ano, tomando como base um ano de referência, a duração média desse ano e os instantes de início de cada estação nesse ano, e fazendo operações com esses valores de referência em relação a uma data/hora de interesse, para determinar a estação em que tal data/hora se encontra.
Todo esse texto foi perdido. Contudo, em outra janela eu estava fazendo uma implementação em Perl do algoritmo, e vi que ela teve resultados interessantes, que confirmam, inclusive, o erro relativamente pequeno mencionado acima. Quando ela ficar pronta, se alguém tiver interesse, posso postar aqui.
Como referência do que eu usei para aprender a respeito dos assuntos mencionados na mensagem perdida, seguem alguns links:
... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)
8. Re: Script das estações
msoliverusa Debian
Post recolhido
Enviado em 01/05/2020 - 19:14h
paulo1205 escreveu:
Que droga!
Eu havia escrito uma resposta relativamente longa condensando algumas informações que eu li a respeito de estações do ano, variações na duração observável do ano em função da data de referência e fatores astronômicos, duração média do ano, e outros assuntos que eu não conhecia mas acabei estudando em função deste tópico, mas, na hora de enviar a mensagem, o VoL pediu que eu fizesse login de novo, e, depois do login, caiu numa página de erro 404, e eu perdi tudo o que havia escrito!
Pior de tudo que esses erros são recorrentes, e eu ainda não criei o hábito de selecionar tudo e fazer um copy antes de enviar...
Na mensagem que eu escrevera, eu detalhara também um algoritmo que, dadas certas limitações de precisão decorrentes de fatores astronômicos que variam a cada ano, permite calcular com erro razoável (i.e. dentro de uma faixa de aproximadamente ±30min) as estações do ano, tomando como base um ano de referência, a duração média desse ano e os instantes de início de cada estação nesse ano, e fazendo operações com esses valores de referência em relação a uma data/hora de interesse, para determinar a estação em que tal data/hora se encontra.
Todo esse texto foi perdido. Contudo, em outra janela eu estava fazendo uma implementação em Perl do algoritmo, e vi que ela teve resultados interessantes, que confirmam, inclusive, o erro relativamente pequeno mencionado acima. Quando ela ficar pronta, se alguém tiver interesse, posso postar aqui.
Como referência do que eu usei para aprender a respeito dos assuntos mencionados na mensagem perdida, seguem alguns links:
... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)
Isso já ocorreu comigo, fique muito P...... da vida.....
Para ocupar o tempo, fiz o script,
Segui a sua sugestão de "testar somente se no mês ocorre a mudança de estação"...
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________
9. consegui
cadu405usa Outra
Post recolhido
Enviado em 13/05/2020 - 01:29h
msoliver escreveu:
Boa noite Cadu, e o script das estações do ano, consegui?
______________________________________________________________________ Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________
consegui, parcialmente ainda não implementei as horas e os minutos.
mes=$(date +%m)
echo "MÊS:$mes"
dia=$(date +%d)
echo "DIA:$dia"
Boa noite Cadu, e o script das estações do ano, consegui?
______________________________________________________________________ Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________
consegui, parcialmente ainda não implementei as horas e os minutos.
mes=$(date +%m)
echo "MÊS:$mes"
dia=$(date +%d)
echo "DIA:$dia"
Cadu, boa noite.
Ao invés de "criar" 4 variáveis (Dia, Mês, Hora e Minuto), e fazer o condicional,
Crie uma só, que é a data no formato Unix Time Stamp, que tem todas as informações.
Para criar, use o date ou o gawk (mais complicado). Com o date:
outono=$(date -d"2020-03-20 00:50:00" +%s)
echo ${outono}
1584676200 Com o gawk:
gawk '{printf "%s\n" ,mktime($1" "$2" "$3" "$4" "$5" "$6)}' <<< "2020 03 20 00 50 00"
1584676200
Contudo, em outra janela eu estava fazendo uma implementação em Perl do algoritmo, e vi que ela teve resultados interessantes, que confirmam, inclusive, o erro relativamente pequeno mencionado acima. Quando ela ficar pronta, se alguém tiver interesse, posso postar aqui.
Segue a tal implementação. Ela faz contas a partir dos horários de referência para início de cada estação do ano no ano 2000 e da duração média do ano tropical, calculando para os anos subsequentes com base em extrapolação dos valores.
Conferindo com uma tabela impressa, vi que os erros ficaram na faixa de ±1h, o que eu acho que deve dar para o gasto. Afastando muito do ano de referência os erros devem ficar maiores.
use vars qw($T0 $TEM $TSJ $TES $TSD $SECONDS_IN_YEAR);
BEGIN {
# Altera temporariamente o fuso-horário para poder fixar UTC como referência.
my $saved_timezone=$ENV{TZ};
$ENV{TZ}="UTC";
tzset();
# Tempo de referência: 2000/01/01 00:00:00 UTC.
$T0=mktime(0, 0, 0, 1, 0, 100);
# Tempos relativos das efemérides no ano 2000 (todos os relógios em UTC).
$TEM=mktime(0, 35, 7, 20, 2, 100)-$T0; # Equinócio de março (2000/03/20 07:35)
$TSJ=mktime(0, 47, 1, 21, 5, 100)-$T0; # Solstício de junho (2000/06/21 01:47)
$TES=mktime(0, 27, 17, 22, 8, 100)-$T0; # Equinócio de setembro (2000/09/22 17:27)
$TSD=mktime(0, 37, 17, 21, 11, 100)-$T0; # Solstício de dezembro (2000/12/21 17:37)
# Duração do ano tropical médio no ano 2000.
#$days_in_year=365.2421896698;
$SECONDS_IN_YEAR=86400*365.2421896698;
# Função que informa a estação aproximada, assumindo as referências do ano
# 2000 para as estações em cada ano. Isso tem erros, por causa dos movimentos
# de precessão (mais ou menos previsível) e nutação (mensurável, mas pouco
# previsível) da Terra e movimentos do próprio Sol, mas esse erro, dentro de
# intervalo pequeno de anos (por exemplo, menor que uns 50 anos) deve ficar
# dentro da faixa de ±60min.
#
# A função recebe o timestamp da hora de interesse (nº de segundos decorridos
# desde 1970/01/01 00:00:00 UTC, que é o formato padrão do UNIX e do C).
sub tell_season ($) {
my ($t_user)=@_;
my ($n_years, $year_offset);
return "verão" if $year_offset<$TEM || $year_offset>=$TSD;
return "outono" if $year_offset<$TSJ;
return "inverno" if $year_offset<$TES;
return "primavera";
}
# Mostra o modo de uso do programa.
sub usage (\*) {
my ($out)=@_;
print $out <<EOM;
Modo de uso: $0 [-H] ( -t | ( -p | -v | -o | -i ) AAAA | [data] )
-h | --help Mostra esta tela de ajuda.
-H Imprime a hora, além da data.
-t Imprime tabela com início de cada estação desde 2000 até 2050.
-p AAAA Mostra início da primavera no ano AAAA.
-v AAAA Mostra início do verão no ano AAAA.
-o AAAA Mostra início do outono no ano AAAA.
-i AAAA Mostra início do inverno no ano AAAA.
data Mostra a estação na data informada (default: data corrente).
Caso o campo "data" seja usado, ele deve estar no formato
[AAAA/]mm/dd[ HH:MM[:SS]]. Se o ano for omitido, assume-se o corrente.
Se a hora for omitida, assume-se 12:00. Se os segundos forem omitidos,
assume-se 00.
Para evitar grandes erros de precisão, os anos informados devem estar entre
2000 e 2050.
EOM
}
Usamos cookies essenciais para manter o site funcionando e Google Analytics para métricas de audiência. Cookies de anúncios só serão carregados se você permitir.