スプリッツアプリを作成しようとしています。すべて正常に動作していましたが、昨日からこのエラーが発生し続けています。
./spritz:176行目:構文エラー:予期しないファイルの終わり
スクリプトファイルを確認しましたが、すべてが完璧に思えます。私は混乱しています、私はついにifステートメントを持っています、そしてそれは正しいようです!最後の部分は次のとおりです。
#checks if speed is 150
157 if [[ $2 -eq 150 ]];
158 then
159 starttime=$SECONDS
160 FS=$'\n'
161 for j in `grep --color=always -iP '\b[^aeiou\s]*[aeiou][^aeiou\s]*\K[aeiou]' $1`;
162 do
163 #Reads the text file in the centre of the screen
164 echo " ___________________"
165 echo " $j";
166 echo " ___________________"
167 echo " Speed 150 wpm"
168 sleep 0.9;
169 clear;
170 done
171 endtime=$(($SECONDS - $starttime))
172 echo "You read $words_read words in $endtime seconds!"
173 exit 8
174 fi
そのエラーの原因は何ですか?
(続き)…(2)正当な理由がない限り、シェル変数を常に引用する必要があります。例えば、
—
スコット
"$1"
、"$2"
、"$SECONDS"
、と"$starttime"
。(3)適切にインデントされたコードを読み、デバッグするのが簡単です。(4)なぜ設定FS
してから使用しないのですか?(5)`…`
と書くことができます$(…)
。(6)$(($SECONDS - $starttime))
同様に記述できます$((SECONDS - starttime))
。繰り返しますが、これは基本的にスタイルの問題です。(7)"$words_read"
ループで変更しないのに、なぜループで印刷するのですか?
デバッグアプローチは次のとおりです。行157〜174を削除して、スクリプトを再度実行してください。それでもエラーが表示される場合(おそらく157行目または158行目と報告されている場合)、問題が 157 行目から174行目にないことを知っているため、さらにさかのぼって確認する必要があります(エラーがなくなるまでプロセスを繰り返します) )。…(続き)
—
スコット
(続き)…エラーが解消したら、最後に削除した行を元に戻し、それらの行を削り出します。たとえば、行157〜174を削除してもエラーが消える場合は、元に戻しますが、行159-160、163〜168、および171〜172を削除します。
—
スコット
`grep …`
を値のリストに置き換えてみてください。言い換えれば、除去のプロセスを使用します。
スコットのコメントのいくつかに関するコメント:(広告2)あなたがしていることを確信しているなら(投稿されたコードで)
—
ジャニス
"$1"
引用する必要があるだけです(広告4)おそらく彼が意味しているIFS
(ではないFS
)?
;
行末にエスケープなし(セミコロン)が必要な状況はわかりません。あなたがライン157、161、165、168の両端にセミコロンを削除して、169(または、あなたがそれらを残すことができます。私はそれがスタイルの問題だと思う)ことができます...(続きを)