Script do Shell do Gnuplot

1

Eu estava fazendo este script de shell para se tornar mais rápido na plotagem de dados com o gnuplot. É o primeiro s que eu escrevo então estou tendo algumas dificuldades. Tudo foi bom até que comecei a fazer a declaração if. Agora, esta execução retorna este erro:

prova2.sh: 53: prova2.sh: Syntax error: end of file unexpected (expecting "fi")

Este é um exemplo. O que estou fazendo errado aqui?

...
if ["$ANSWER" == "S"]
then
    ANSWER= set grid
else
    ANSWER=""
    echo "you want the plot whit boxes with lines or with points?"
    read HOW
    if ["$HOW" == "boxes"]
    then
        P= boxes
    else if ["$HOW" == "lines"]
    then
        P= lines
    else if ["$HOW" == "points"]
    then
        P= points
        gnuplot <<EOF
   ...
   fi
    
por Tarlo_x 24.10.2015 / 23:12

2 respostas

2

Aqui está uma versão corrigida da seção if / then / elif / fi do seu script:

if [ "$ANSWER" == "S" ]
then
    ANSWER='set grid'
else 
    ANSWER=""
fi

echo "you want the plot with boxes, with lines, or with points?"
read HOW

if [ "$HOW" == "boxes" ]
then
    P=boxes
elif [ "$HOW" == "lines" ]
then
    P=lines
elif [ "$HOW" == "points" ]
then
    P=points
fi

Observe a falta de espaço após o = ao definir ANSWER e P e o uso de elif em vez de else if . Eu também adicionei um espaço entre [ e as variáveis que estão sendo testadas [boxes ou [S não é o mesmo que [ boxes ou [ S . O primeiro tenta executar, por exemplo, o comando [boxes , enquanto o segundo executa [ com um argumento de boxes .

Eu também coloquei aspas em ANSWER='set grid' , sem elas ele irá definir ANSWER=set e então tentar executar um comando chamado grid . Tecnicamente, deve haver cotações nas linhas P= também, mas com apenas uma palavra (sem espaços) após o = , não precisa delas.

Pessoalmente, colocaria o then s nas mesmas linhas que o if e elif , porque eu acho que ele fica muito mais legível, mas isso não importa - é apenas uma preferência de estilo, o código funciona da mesma maneira.

if [ "$HOW" == "boxes" ] ; then
    P=boxes
elif [ "$HOW" == "lines" ] ; then
    P=lines
elif [ "$HOW" == "points" ] ; then
    P=points
fi
    
por 24.10.2015 / 23:36
1

Você precisa encerrar cada % declaraçãoif com fi em sh. Assim:

#!/bin/sh

BANANA=1

if [ $BANANA -eq 1 ]; then 
   echo "Banana was 1"
else
    echo "Oops"
fi
echo "This line will always be run"

Ou seja, você precisa de um fi para cada if em seu programa e a localização do fi determina onde o código que às vezes é executado termina.

    
por 24.10.2015 / 23:28