Saya mencoba membuat aplikasi spritz. Semuanya berfungsi dengan baik, tapi sejak kemarin saya terus mendapatkan kesalahan ini:
./spritz: baris 176: kesalahan sintaks: akhir file yang tak terduga
Saya telah memeriksa file skrip dan semuanya tampak sempurna. Saya bingung, akhirnya saya memiliki pernyataan if dan itu terlihat benar! Ini bagian terakhir:
#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
Apa yang bisa menyebabkan kesalahan itu?
bash
shell-script
Scott Pearce
sumber
sumber
;
tanda titik koma di akhir baris . Anda dapat menghapus titik koma di ujung baris 157, 161, 165, 168, dan 169. (Atau Anda dapat membiarkannya; Saya kira ini masalah gaya.) ... (Lanjutkan)"$1"
,"$2"
,"$SECONDS"
, dan"$starttime"
. (3) Lebih mudah untuk membaca dan men-debug kode yang indentasi dengan benar. (4) Mengapa Anda mengaturFS
dan kemudian tidak menggunakannya? (5)`…`
dapat ditulis$(…)
. (6)$(($SECONDS - $starttime))
dapat ditulis secara setara$((SECONDS - starttime))
. Sekali lagi, ini pada dasarnya masalah gaya. (7) Mengapa Anda mencetak"$words_read"
dalam loop ketika Anda tidak memodifikasinya dalam loop?`grep …`
dengan daftar nilai. Dengan kata lain, gunakan proses eliminasi."$1"
perlu mengutip, (iklan 4) mungkin maksudnyaIFS
(dan tidakFS
)?Jawaban:
Diagnostik "akhir yang tak terduga dari file" adalah petunjuk bahwa Anda memiliki beberapa tertandingi atau tidak terselesaikan pembukaan sintaksis konstruk (
if
w / ofi
,do
w / odone
, kurung pembukaan w / o satu, pembukaan terkait penutupan tapi kutipan tidak terselesaikan, dll). Nomor baris yang menunjuk ke akhir skrip tidak membantu dalam kasus ini, selain mengatakan untuk memeriksa konstruksi sintaksis Anda; kesalahan mungkin ada di mana saja dalam kode Anda. Anda harus memeriksanya.sumber