Errore di sintassi: fine imprevista del file – script Bash [chiuso]

Chiuso . Questa domanda richiede dettagli o chiarezza . Attualmente non accetta risposte.

Commenti

  • (0) Sarebbe stato più utile mostrarci una differenza dallultima versione che ha funzionato. …………………… Alcune osservazioni (che probabilmente non riguardano il tuo attuale problema specifico): (1) Non conosco nessuna circostanza in cui hai bisogno di un ; (punto e virgola) alla fine di una riga. Puoi eliminare i punti e virgola alla fine delle righe 157, 161, 165, 168 e 169. (Oppure puoi lasciarli in; Immagino sia una questione di stile.)… (Continua)
  • (Continua)… (2) Dovresti sempre citare le variabili di shell a meno che tu non abbia una buona ragione per non farlo e sei sicuro di sapere cosa stai facendo; ad es. "$1", "$2", "$SECONDS" e "$starttime". (3) È più facile leggere ed eseguire il debug del codice rientrato correttamente. (4) Perché imposti FS e poi non lo usi? (5) `…` può essere scritto $(…). (6) $(($SECONDS - $starttime)) può essere scritto in modo equivalente $((SECONDS - starttime)). Di nuovo, questa è fondamentalmente una questione di stile. (7) Perché stampi "$words_read" nel ciclo quando non lo modifichi nel ciclo?
  • Ecco un approccio di debug: prova a eliminare le righe 157- 174 ed eseguendo di nuovo lo script. Se ricevi ancora lerrore (probabilmente riportato come alla riga 157 o 158), allora sai che il problema non è nelle righe 157-174 e devi guardare più indietro (quindi, ripeti il processo fino a quando lerrore scompare). … (Continua)
  • (Continua) … Una volta che lerrore scompare, rimetti le ultime righe eliminate e inizia a ritagliarle. Ad esempio, se leliminazione delle righe 157-174 fa scomparire lerrore, reinserirle, ma poi eliminare le righe 159-160, 163-168 e 171-172. Prova a sostituire `grep …` con un elenco di valori. In altre parole, utilizza il processo di eliminazione.
  • Osservazioni su alcuni commenti di Scott ': (ad 2) se sei sicuro di quello che stai facendo quindi (nel codice pubblicato) solo "$1" necessita di citazione, (annuncio 4) probabilmente intendeva IFS (e non FS)?

Risposta

La ” fine del file inattesa diagnostica “ indica che hai un costrutto sintattico di apertura senza corrispondenza o terminato (if w / o fi, do senza done, parentesi di apertura senza quella di chiusura associata, virgolette aperte ma non terminate, ecc.). Il numero di riga che punta alla fine dello script non è utile in questo caso, oltre a dire di ispezionare i tuoi costrutti sintattici; lerrore potrebbe essere ovunque nel codice. Devi verificarlo.

Commenti

  • Grazie per la risposta. Ho trovato lerrore e lho risolto!
  • – lerrore potrebbe essere ovunque nel tuo codice. Account creato solo per votare a favore di questo consiglio.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *