Gnuplot shell 脚本

Gnuplot shell 脚本

我正在制作这个 shell 脚本,以便用 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

=请注意,当设置ANSWERand后缺少空格P,并且使用elifnot else if。我还在[和 正在测试的变量之间添加了一个空格[boxesor与or[S不同。前者尝试运行例如命令,而后者则使用参数运行。[ boxes[ S[boxes[boxes

我还在 中添加了引号ANSWER='set grid',如果没有引号,它将设置ANSWER=set,然后尝试运行名为 的命令grid。从技术上讲,行上也应该有引号P=,但后面只有一个单词(没有空格),=则不需要它们。


就我个人而言,我会将s 与andthen放在同一行,因为我认为这使其更具可读性,但这并不重要 - 这只是一种样式偏好,无论哪种方式,代码的工作方式都是相同的。ifelif

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

答案2

你必须结束每个 if声明与fiin sh.像这样:

#!/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决定了仅有时执行的代码的结束位置。

相关内容