나는 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
공백이 부족하다는 점에 유의하세요 . 또한 테스트 중인 변수 또는 와 다른 변수 사이에 공백을 추가했습니다 . 전자는 예를 들어 명령을 실행하려고 시도하고 후자는 인수를 사용하여 실행합니다.P
elif
else if
[
[boxes
[S
[ boxes
[ S
[boxes
[
boxes
또한 ANSWER='set grid'
따옴표가 없는 경우 설정될 따옴표를 추가한 ANSWER=set
다음 이라는 명령을 실행해 보았습니다 grid
. 기술적으로는 해당 줄에도 따옴표가 있어야 P=
하지만 그 뒤에 한 단어만 있으면(공백 없이) =
필요하지 않습니다.
개인적으로 저는 s를 then
the와 같은 줄에 배치하고 가독성이 더 좋다고 생각하지만 실제로는 중요하지 않습니다. 이는 단지 스타일 선호일 뿐이며 어느 쪽이든 코드가 작동합니다. 메서드는 모두 동일합니다.if
elif
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