Controle de fluxo no Shell

Iniciado por rickynunes, 14 de Setembro de 2013, 20:51

tópico anterior - próximo tópico

rickynunes

Fala galera!
Então dessa vez to com um probleminha um pouco mais complexo pra mim.
Tenho um exercício que tenho que criar um script pra calcular o numero de diagonais de um polígono convexo. A formula aritmética é: nº de lados*(nº de lados-3)/2.
Explicando rapidinho pra quem não sabe (eu tbm não sabia), uma diagonal liga as vertices internas do poligono vou por um link com a imagem pra explicar melhor:
http://www.google.com.br/imgres?safe=off&sa=X&biw=1777&bih=824&tbm=isch&tbnid=-R5BV8Ah_S-ERM:&imgrefurl=http://www.brasilescola.com/matematica/numero-diagonais-um-poligono-convexo.htm&docid=Y53Eio0l_1XUZM&imgurl=http://www.brasilescola.com/upload/e/Untitled-2(119).jpg&w=351&h=150&ei=jfM0UquqEof69QTp7YGADg&zoom=1&ved=1t:3588,r:3,s:0,i:88&iact=rc&page=1&tbnh=120&tbnw=280&start=0&ndsp=34&tx=152&ty=64

Enfim, consegui fazer o básico de boa, porém, queria dar uma enfeitada, queria que quando inserisse o 3 indicando que o poligono tem 3 lados, me enviasse um aviso que não existem diagonais em polígonos de três lados e que quando inserisse o numero 2 ou menos, me avisasse que não existem poligonos de 2 lados ou menos.
Isso tudo seria usando if, then, else né?
Como ficaria o script.

este aqui roda de boa, é o básico, que só calcula não importa o numero:
#!/bin/bash
#Calculo de diagonais
echo "Insira o numero de lados do poligono:"
read nl
nd=$(($nl*($nl-3)/2))
echo "O numero de diagonais e: $nd"

esse aqui que fiz mais ou menos, mas tem coisas erradas (que não sei o que é), peguei o modelo em alguns sites:
#!/bin/bash
#Calculo de diagonais
echo "Insira o numero de lados do poligono:"
read nl
if [$nl=3];then
echo "Não existem diagonais em triangulos."
elif [$nl<3];then
echo "Não existem poligonos com 2 ou menos lados."
nd=$(($nl*($nl-3)/2))
echo "O numero de diagonais e: $nd"
fi

selvaking

#1
#!/bin/bash
#Calculo de diagonais
echo "Insira o numero de lados do poligono:"
read nl
tri=3
nd=$(($nl*($nl-$tri)/2))
if [ "$nl" -eq "$tri" ]
then
echo "Não existem diagonais em triangulos."
elif [ "$nl" -lt "$tri" ]
then
echo "Não existem poligonos com 2 ou menos lados."
else
echo "O numero de diagonais e: $nd"
fi
Dê-me um computador com o Tux que movo o mundo!

Linux User #323049

irtigor

Seria interessante que usa-se a tag de código... de qualquer forma, o espaço no comando de teste não é opcional, você tá fazendo comparação de strings, e esqueceu o else. Leia: http://mywiki.wooledge.org/BashFAQ/031

rickynunes

Citação de: selvaking online 14 de Setembro de 2013, 21:32
#!/bin/bash
#Calculo de diagonais
echo "Insira o numero de lados do poligono:"
read nl
tri=3
nd=$(($nl*($nl-$tri)/2))
if [ "$nl" -eq "$tri" ]
then
echo "Não existem diagonais em triangulos."
elif [ "$nl" -lt "$tri" ]
then
echo "Não existem poligonos com 2 ou menos lados."
else
echo "O numero de diagonais e: $nd"
fi

Valeu cara deu certinho! Só que aqui em vez de atribuir o 3 como a variável "tri" tentei usar direto o 3, deu certin.. vlw cara, de verdade!
Então eu crio todo o script e só no final adiciono o controle de fluxo?

VLW CARA!!

irtigor

Você pode fazer em qualquer ponto, onde as variáveis necessárias pro calculo existam e alcance o else (que é onde você mostra), então sobra antes do if e dentro do else antes do echo.

selvaking

Citação de: rickynunes online 14 de Setembro de 2013, 23:27
Valeu cara deu certinho! Só que aqui em vez de atribuir o 3 como a variável "tri" tentei usar direto o 3, deu certin.. vlw cara, de verdade!
Então eu crio todo o script e só no final adiciono o controle de fluxo?

VLW CARA!!

Não há de que! Eu gosto desses desafios em script. E estes do BASH são demais.
Dá uma olhada no "Advanced Bash-Scripting Guide" que é uma bíblia para os novatos.

Ele pode ser até instalado no seu micro e acessado localmente.

sudo apt-get install abs-guide

http://localhost/doc/abs-guide/html/
Dê-me um computador com o Tux que movo o mundo!

Linux User #323049

rickynunes

Citação de: selvaking online 15 de Setembro de 2013, 12:52
Citação de: rickynunes online 14 de Setembro de 2013, 23:27
Valeu cara deu certinho! Só que aqui em vez de atribuir o 3 como a variável "tri" tentei usar direto o 3, deu certin.. vlw cara, de verdade!
Então eu crio todo o script e só no final adiciono o controle de fluxo?

VLW CARA!!

Não há de que! Eu gosto desses desafios em script. E estes do BASH são demais.
Dá uma olhada no "Advanced Bash-Scripting Guide" que é uma bíblia para os novatos.

Ele pode ser até instalado no seu micro e acessado localmente.

sudo apt-get install abs-guide

http://localhost/doc/abs-guide/html/
Mto show cara!! Vai ajudar mto!! Brigadaum!!