私は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=
が、後ろに1つの単語がなければ(スペースなしで)=
必要はありません。
個人的に、私は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
プログラムのすべてには 1 つが必要であり、時には実行のみされるコードが終わる位置はif
位置によって決まります。fi