Gnuplot 쉘 스크립트

Gnuplot 쉘 스크립트

나는 gnuplot을 사용하여 데이터를 더 빠르게 플롯하기 위해 이 쉘 스크립트를 만들고 있습니다. 이것은 제가 처음으로 쓴 ss이므로 약간의 어려움을 겪고 있습니다. if 문을 만들기 전까지는 모든 것이 괜찮았습니다. 이제 이 명령을 실행하면 다음 오류가 반환됩니다.

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

여기에 예가 있습니다. 내가 여기서 뭘 잘못하고 있는 걸까?

...
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

답변1

다음은 스크립트의 if/then/elif/fi 부분을 수정한 버전입니다.

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

=and가 설정 되고 not이 사용되면 ANSWER공백이 부족하다는 점에 유의하세요 . 또한 테스트 중인 변수 또는 와 다른 변수 사이에 공백을 추가했습니다 . 전자는 예를 들어 명령을 실행하려고 시도하고 후자는 인수를 사용하여 실행합니다.Pelifelse if[[boxes[S[ boxes[ S[boxes[boxes

또한 ANSWER='set grid'따옴표가 없는 경우 설정될 따옴표를 추가한 ANSWER=set다음 이라는 명령을 실행해 보았습니다 grid. 기술적으로는 해당 줄에도 따옴표가 있어야 P=하지만 그 뒤에 한 단어만 있으면(공백 없이) =필요하지 않습니다.


개인적으로 저는 s를 thenthe와 같은 줄에 배치하고 가독성이 더 좋다고 생각하지만 실제로는 중요하지 않습니다. 이는 단지 스타일 선호일 뿐이며 어느 쪽이든 코드가 작동합니다. 메서드는 모두 동일합니다.ifelif

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

답변2

너는 끝내야 해 if다음과 같이 sh.에서 선언하세요 fi.

#!/bin/sh

BANANA=1

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

즉, fi프로그램의 모든 것에는 하나가 필요하며 , 때때로 실행만 되는 코드가 끝나는 위치는 if위치 에 따라 결정됩니다.fi

관련 정보