Διορθώστε το συντακτικό σφάλμα Bash κοντά σε μη αναμενόμενο διακριτικό

Η κωδικοποίηση στο Linux Bash Terminal έχει γίνει μια κυρίαρχη πρακτική στον τομέα της κωδικοποίησης. Οι μηχανικοί λογισμικού και οι μαθητές που μαθαίνουν τη γλώσσα κωδικοποίησης συναντούν διάφορα σφάλματα. Εάν έχετε δει επανειλημμένα τα σφάλματα όπως το συντακτικό σφάλμα κοντά σε απροσδόκητο διακριτικό ‘(‘ ή το συντακτικό σφάλμα Bash κοντά σε απροσδόκητο διακριτικό, μπορείτε να δοκιμάσετε να βασιστείτε στις μεθόδους που περιγράφονται στο άρθρο και να γίνετε ικανός κωδικοποιητής. Διαβάστε τις μεθόδους που περιγράφονται στο άρθρο στο σειρά που περιγράφεται και διορθώστε τα σφάλματα στις γραμμές εντολών στο αρχείο σας.

Πώς να διορθώσετε το συντακτικό σφάλμα Bash κοντά σε απροσδόκητο διακριτικό

Το Linux Bash είναι ένας διερμηνέας γραμμής εντολών για το σύστημα που βασίζεται σε Linux και αντικαθιστά το Bourne Shell ή το sh. Τα αρχεία ονομάζονται χρησιμοποιώντας τη μορφή .sh στο Linux Bash scripting. Εάν υπάρχουν προβλήματα μορφοποίησης στον κώδικα στο σενάριο του κελύφους, ενδέχεται να αντιμετωπίσετε ένα συντακτικό σφάλμα. Εάν το σφάλμα είναι κοντά στον χαρακτήρα (, το κέλυφος θα σας ζητήσει το σφάλμα στη γραμμή και θα εμφανίσει το σφάλμα στην αντίστοιχη γραμμή. Επειδή το Linux Bash είναι διερμηνέας, η γραμμή με το σφάλμα θα επιστραφεί σε εσάς στο το Terminal και θα σταματήσει να σαρώνει τις υπόλοιπες εντολές στο σενάριο. Ως εκ τούτου, πρέπει να διορθώσετε το σφάλμα στη συγκεκριμένη γραμμή εντολών και να προχωρήσετε στο επόμενο για να διορθώσετε το απροσδόκητο σφάλμα διακριτικού στο σενάριο του φλοιού. Οι αιτίες για τη σύνταξη σφάλμα σχεδόν μη αναμενόμενο διακριτικό στο Linux Bash παρατίθενται παρακάτω σε αυτήν την ενότητα ως παρακάτω:

  • Κωδικοποίηση με ακολουθίες διαφυγής- Εάν έχετε γράψει τους κωδικούς στη δέσμη ενεργειών Bash, οι ακολουθίες διαφυγής ή τα εισαγωγικά στο σενάριο ενδέχεται να προκαλέσουν σφάλματα. Οι ακολουθίες διαφυγής και τα εισαγωγικά πρέπει να γραφτούν στη σωστή μορφή για να διορθωθεί το σφάλμα.

  • Λανθασμένη σύνταξη στο αρχείο κωδικοποίησης- Η σύνταξη στον κώδικα μπορεί να δώσει το συντακτικό σφάλμα εάν η εντολή είναι γραμμένη σε λάθος σύνταξη, όπως αλλαγή της σειράς των βρόχων.

  • Λανθασμένη χρήση της εντολής- Εάν δεν χρησιμοποιείτε σωστά την εντολή, όπως λανθασμένη εκχώρηση τιμής, ενδέχεται να έχετε συντακτικό σφάλμα.

  • Μη συμβατό λειτουργικό σύστημα στα συστήματα- Εάν το κέλυφος για το σενάριο κωδικοποίησης δεν είναι συμβατό μεταξύ των συστημάτων Unix και DOS, ενδέχεται να έχετε ένα απροσδόκητο σφάλμα.

  • Ζητήματα στο σενάριο του κελύφους bash- Τα ζητήματα που εκτελούνται στο σενάριο του κελύφους bash στο αρχείο που αντιγράφηκε από άλλο σύστημα ενδέχεται να προκαλέσουν το απροσδόκητο σφάλμα διακριτικού.

Εξετάστε ένα αρχείο με το όνομα example.sh που δημιουργήθηκε στη δέσμη ενεργειών του Linux Bash με τις ακόλουθες γραμμές εντολών για επεξηγηματικούς σκοπούς. Το αρχείο παραδείγματος έχει τις δυνατότητες για συντακτικά λάθη και περιλαμβάνει όλες τις πιθανές εντολές που μπορούν να χρησιμοποιηθούν στο σενάριο του φλοιού.

str= ‘First command line of ‘(example file)’ in the script’
str= [(1,2),(3,4)]
if[ $day == “mon” ] then
 echo “mon”
else
 echo “no mon”
fi
for VARIABLE in {0..2}; then
do echo command1; echo command2; echo command3; echo command4; done
while true; do if [ $ day == “mon” ]; then echo “mon”; else echo “not mon”; done; fi

Μέθοδος 1: Μη αυτόματη διόρθωση σφαλμάτων σε κάθε γραμμή εντολών

Η πρώτη μέθοδος για να διορθώσετε τα σφάλματα είναι να διορθώσετε το συντακτικό σφάλμα με μη αυτόματο τρόπο σε κάθε γραμμή εντολών στο σενάριο. Τα βήματα για την επίλυση των σφαλμάτων σύνταξης σχεδόν μη αναμενόμενο διακριτικό στις γραμμές εντολών συζητούνται σε αυτήν την ενότητα. Η διαδικασία για τη διόρθωση του απροσδόκητου σφάλματος διακριτικού στο τερματικό περιγράφεται παρακάτω. Εκτελέστε το αρχείο στο Terminal πληκτρολογώντας την εντολή ./example.sh και πατώντας το πλήκτρο Enter.

2. Σημειώστε τις γραμμές που έχουν το απροσδόκητο σφάλμα διακριτικού στις γραμμές εντολών στο παρακάτω αποτέλεσμα.

3. Διορθώστε το σφάλμα σε κάθε γραμμή ακολουθώντας τις μεθόδους που περιγράφονται παρακάτω ξεχωριστά και αποθηκεύοντας το αρχείο.

4. Εκτελέστε ξανά το αρχείο μετά τις αλλαγές και ελέγξτε εάν το συντακτικό σφάλμα έχει επιλυθεί στο αρχείο.

Βήμα I: Διαβάστε το περιεχόμενο του αρχείου

Το πρώτο βήμα για την επίλυση του συντακτικού σφάλματος στις γραμμές εντολών είναι να διαβάσετε το αρχείο στο Terminal. ΕΑΝ υπάρχουν προβλήματα με το αρχείο, ενδέχεται να μην μπορείτε να προβάλετε το αρχείο. Η συνήθης πρακτική της προβολής του αρχείου είναι η εκτέλεση του αρχείου χρησιμοποιώντας την εντολή ./example.sh, αλλά δεν μπορείτε να τροποποιήσετε το περιεχόμενο του αρχείου. Οι επιλογές για την προβολή του περιεχομένου του αρχείου και την τροποποίηση των γραμμών εντολών για τη διόρθωση του συντακτικού σφάλματος κοντά σε απροσδόκητο διακριτικό «(» συζητούνται παρακάτω.

Επιλογή 1: Μέσω της εντολής CAT

Η πρώτη επιλογή είναι να χρησιμοποιήσετε την εντολή cat για να προβάλετε το αρχείο στο σενάριο του κελύφους. Διαβάστε το περιεχόμενο του αρχείου με το απροσδόκητο σφάλμα διακριτικού χρησιμοποιώντας την εντολή cat πληκτρολογώντας την εντολή cat –v example.sh στο Terminal.

Σημείωση 1: Το example.sh χρησιμοποιείται για επεξηγηματικούς σκοπούς και πρέπει να πληκτρολογήσετε το όνομα του αρχείου που έχει το μη αναμενόμενο σφάλμα διακριτικού.

Σημείωση 2: Η εντολή cat –v χρησιμοποιείται για την εμφάνιση όλων των αόρατων χαρακτήρων που είναι πιθανό να αντιπροσωπεύουν το χώρο επιστροφής μεταφοράς ή μη διαλείμματος.

Επιλογή 2: Μέσω VX Command

Εάν δεν μπορείτε να χρησιμοποιήσετε την εντολή cat, μπορείτε να δοκιμάσετε να χρησιμοποιήσετε την εντολή vx για να προβάλετε και να τροποποιήσετε τις εντολές στο αρχείο χρησιμοποιώντας το βήμα που δίνεται παρακάτω. Πληκτρολογήστε την εντολή sh –vx ./example.sh στο Terminal για να ανοίξετε το αρχείο.

Επιλογή 3: Μέσω od –a Command

3. Εάν υπάρχουν μερικοί αόρατοι χαρακτήρες στις γραμμές εντολών, μπορείτε να χρησιμοποιήσετε την εντολή od –a για να προβάλετε το αρχείο. Εάν το περιεχόμενο του αρχείου δεν είναι ορατό στο αρχείο κώδικα, μπορείτε να δοκιμάσετε να διαβάσετε το αρχείο χρησιμοποιώντας την εντολή od –a example.sh για να τροποποιήσετε τον κώδικα.

Βήμα II: Καταργήστε τις διακοπές γραμμής των Windows

Εάν υπάρχουν αλλαγές γραμμής των Windows στο σενάριο του κελύφους, μπορείτε να χρησιμοποιήσετε τις εντολές της κονσόλας για να καταργήσετε τις αλλαγές γραμμής και να αντιγράψετε τις γραμμές κώδικα σε ένα νέο αρχείο για να διορθώσετε το σφάλμα.

Εισαγάγετε την ακόλουθη εντολή στο Terminal για να αποθηκεύσετε το περιεχόμενο του αρχείου σε ένα άλλο αρχείο με το όνομα correctedexample.sh για να καταργήσετε τις αλλαγές γραμμής των Windows στο σενάριο.

tr –d ‘r’ <example.sh> correctedexample.sh

Βήμα III: Ορίστε τα δικαιώματα στο αρχείο που δημιουργήθηκε πρόσφατα

Πρέπει να ορίσετε την άδεια στο αρχείο που δημιουργήθηκε πρόσφατα για να επεξεργαστείτε το αρχείο έτσι ώστε το αρχείο να μπορεί να εκτελεστεί στο κέλυφος. Πληκτρολογήστε την εντολή ως chmod 755 correctedexample.sh στο Terminal για να δώσετε τα δικαιώματα στο αρχείο και να εκτελέσετε το αρχείο. Τώρα μπορείτε να προβάλετε το διορθωμένο αρχείο και να διορθώσετε τα προβλήματα μορφοποίησης και να διορθώσετε το σφάλμα σύνταξης κοντά σε απροσδόκητο διακριτικό ‘(‘ στο αρχείο.

Βήμα IV: Μορφοποιήστε τον κώδικα στο Αρχείο

Το δεύτερο βήμα είναι να μορφοποιήσετε τις γραμμές κώδικα μεμονωμένα και να αλλάξετε τις γραμμές εντολών με μη αυτόματο τρόπο στο αρχείο. Οι επιλογές για τη μορφοποίηση του αρχείου ώστε να διορθωθεί το συντακτικό σφάλμα κοντά σε απροσδόκητο διακριτικό «(» συζητούνται παρακάτω σε αυτήν την ενότητα.

Επιλογή 1: Αντικατάσταση μεμονωμένων εισαγωγικών με διπλά εισαγωγικά

Εάν χρησιμοποιείτε τα μονά εισαγωγικά στις γραμμές εντολών, πρέπει να αλλάξετε την εντολή αντικαθιστώντας το μεμονωμένο εισαγωγικό με διπλά εισαγωγικά για να διορθώσετε το συντακτικό σφάλμα. Στο αρχείο example.sh, αφαιρέστε τις γραμμές κώδικα που έχουν ‘ και ‘ ή τα μονά εισαγωγικά στην εντολή και αντικαταστήστε τα μεμονωμένα εισαγωγικά με τα διπλά εισαγωγικά ή το ” και ”. Εδώ, στο αρχείο του παραδείγματος, πρέπει να αλλάξετε τον κώδικα ως str= “Πρώτη γραμμή εντολών του “(αρχείο παράδειγμα)” στο σενάριο”

Σημείωση: Τα διπλά εισαγωγικά είναι απαραίτητα για τις εντολές τύπου παραμέτρου όπως str= “[(1,2),(3,4)]”.

Επιλογή 2: Προσθήκη $ στις Γραμμές συμβολοσειράς

Εάν έχετε προσθέσει τιμές συμβολοσειράς στο σενάριο, πρέπει να προσθέσετε ένα $ στις τιμές συμβολοσειράς για να διορθώσετε το συντακτικό σφάλμα στο σενάριο. Προσθέστε το $ για τις γραμμές εντολών με τις τιμές συμβολοσειράς για να διορθώσετε το μη αναμενόμενο σφάλμα. Εδώ, στο αρχείο του παραδείγματος, αλλάξτε τη γραμμή εντολών ως:

str= $ ‘First command line of ‘(example file)’ in the script’

Σημείωση: Εάν χρησιμοποιείτε το $ στην τιμή συμβολοσειράς, μπορείτε να παρακάμψετε την ακολουθία διαφυγής ανάστροφης κάθετου καθώς οι γραμμές εντολών αποκωδικοποιούνται από το πρότυπο ANSI C. Με άλλα λόγια, χρησιμοποιώντας μια τιμή $ για συμβολοσειρά, μπορείτε να αποφύγετε τη χρήση των διπλών εισαγωγικών αντί των μεμονωμένων εισαγωγικών στις γραμμές εντολών.

Επιλογή 3: Μετατροπή καρτελών σε κενά

Τα κενά που έχετε αφήσει μεταξύ δύο εντολών στην εντολή πρέπει να είναι κενά αντί για καρτέλες για να διορθώσετε το συντακτικό σφάλμα στο σενάριο. Εάν λαμβάνετε το σφάλμα στο Cygwin, μπορείτε να δοκιμάσετε να μετατρέψετε τις καρτέλες στους κωδικούς σε κενά για να διορθώσετε το σφάλμα. Η γραμμή εντολών δίνεται παρακάτω ως:

do echo command1;       echo command2;             echo command3;             echo command4;             done

Η παραπάνω εντολή θα πρέπει να ξαναγραφτεί όπως φαίνεται παρακάτω για να διορθωθεί το σφάλμα.

do echo command1; echo command2; echo command3; echo command4; done

Επιλογή 4: Χρησιμοποιήστε χαρακτήρες διαφυγής

Εάν χρησιμοποιείτε χαρακτήρα bash, είναι σημαντικό να χρησιμοποιήσετε έναν χαρακτήρα διαφυγής μαζί με τον χαρακτήρα bash για να διορθώσετε το συντακτικό σφάλμα. Οι παρενθέσεις ή () είναι ειδικοί χαρακτήρες bash στο αρχείο, επομένως, θα χρειαστεί να χρησιμοποιήσετε τον χαρακτήρα διαφυγής ή την ανάστροφη κάθετο στη γραμμή εντολών για να διαφύγετε από τους κανονικούς χαρακτήρες για να εκτελέσετε την εντολή. Η εντολή str= «Πρώτη γραμμή εντολών του «(αρχείο παραδείγματος)» στο σενάριο» δεν θα δώσει σφάλμα στο Terminal καθώς χρησιμοποιείται ο χαρακτήρας διαφυγής.

Επιλογή 5: Χρησιμοποιήστε χώρο μεταξύ των χαρακτήρων

Το σενάριο φλοιού αναγνωρίζει τις εντολές και τις δηλώσεις στο σενάριο από τις προεπιλεγμένες τιμές. Πρέπει να διασφαλίσετε τη σωστή χρήση του χώρου μεταξύ των χαρακτήρων, έτσι ώστε το κέλυφος να μπορεί να αναγνωρίσει την εντολή που δίνεται στο σενάριο. Το διάστημα είναι ένας χαρακτήρας που χρησιμοποιείται για τη διαφοροποίηση δύο χαρακτήρων στη γραμμή εντολών. Στον κώδικα, δεν υπάρχει κενό μεταξύ των αν και [, which gives the unexpected token error as the if[ command is not identified by the shell. If the code is changed to if [ $ day == “mon” ]; τότε το σφάλμα μπορεί να λυθεί ως η εντολή του δελτίου φλοιού, εάν εντοπιστεί από το φλοιό.

Επιλογή 6: Χρησιμοποιήστε το διαχωριστικό εντολών για δηλώσεις

Οι διάφορες εντολές στο σενάριο του φλοιού πρέπει να χωριστούν σε δηλώσεις ώστε το Terminal να αναγνωρίζει μεμονωμένες εντολές. Πρέπει να χρησιμοποιήσετε ένα διαχωριστικό εντολών για να διορθώσετε το συντακτικό σφάλμα στο Linux Bash. Οι δηλώσεις στην εντολή πρέπει να διαχωρίζονται με διαχωριστικό εντολών, όπως ερωτηματικό ή ? ή μια νέα γραμμή πατώντας το πλήκτρο Enter. Για παράδειγμα, η εντολή στον κώδικα if [ $ day == “mon” ] τότε πρέπει να τροποποιηθεί σαν να [ $ day == “mon” ]; στη συνέχεια για να διορθώσετε το σφάλμα. Δεδομένου ότι το ερωτηματικό χρησιμοποιείται ως διαχωριστικό εντολών μεταξύ των χαρακτήρων [ and then, you can fix this error.

Option 7: Remove Additional Statements

Sometimes, you may have added additional statements or may have mixed up the codes in case of multiple nested loops. You need to remove the additional statements on the command lines to fix the Syntax error near unexpected token ‘(’ in the Linux Bash. The bash loops for…done or and the constructional constructs if… fi needs to be in the correct syntax. The example file has the wrong syntax in the for loop has the term then which is used in the if statement. Modifying the code as the following code will fix the unexpected token error. The statement then is an additional statement in the code and removing the term will fix the error.

for VARIABLE in {0..2}; do echo command1; echo command2; echo command3; echo command4; done 

Option 8: Ensure Order of Closing of Statements is Correct

If you are using many nested or conditional construct statements in the shell script, you have to ensure that the loops are closed in the order they are opened. You can use a new line separator to avoid conflicts with the loops. The order of closing the nested loops and conditional statements should be correct and must not be altered. The loops in the code while true; do if [ $ day == “mon” ]; μετά ηχώ “μον”? Αλλιώς ηχώ “όχι μον”? Ολοκληρώθηκε; Το fi πρέπει να κλείσει με τη σωστή σειρά. Η αλλαγή του κώδικα όπως φαίνεται παρακάτω μπορεί να διορθώσει το απροσδόκητο σφάλμα διακριτικού καθώς διορθώνεται η σειρά κλεισίματος των δηλώσεων.

while true; do if [ $ day == “mon” ]; then echo “mon”; else echo “not mon”; fi; done

Μέθοδος 2: Ξαναγράψτε τον κώδικα

Εάν έχετε αντιγράψει τον κώδικα και τον έχετε επικολλήσει σε ένα νέο αρχείο στο τερματικό, μπορείτε να δοκιμάσετε να ξαναγράψετε τον κώδικα με μη αυτόματο τρόπο για να διορθώσετε το σφάλμα. Τα σφάλματα στον κώδικα μπορούν να διορθωθούν εάν έχετε γράψει τον κώδικα χωρίς σφάλματα μορφής στο σενάριο του φλοιού. Αυτό συμβαίνει επειδή οι κρυφοί χαρακτήρες και τα ζητήματα μορφοποίησης στο πρόγραμμα επεξεργασίας κειμένου, όπως το Microsoft Word, που μπορεί να είχατε χρησιμοποιήσει για την αντιγραφή και επικόλληση του κώδικα, ενδέχεται να έχουν δώσει το σφάλμα.

Μέθοδος 3: Χρησιμοποιήστε την εντολή Dos2unix.exe

Εάν χρησιμοποιείτε λειτουργικό σύστημα Unix, μπορείτε να γράψετε κωδικούς με τον χαρακτήρα τροφοδοσίας γραμμής ως n για να μετακινηθείτε στην επόμενη γραμμή του αρχείου. Ωστόσο, εάν χρησιμοποιείτε λειτουργικό σύστημα Windows, πρέπει να μετακινηθείτε στην επόμενη γραμμή του κώδικα χρησιμοποιώντας την επιστροφή μεταφοράς και την τροφοδοσία γραμμής ή το rn στο αρχείο. Εάν εκτελέσετε τον κώδικα που είναι γραμμένος στο λειτουργικό σύστημα των Windows στο Cygwin, ενδέχεται να εμφανιστεί το συντακτικό σφάλμα κοντά σε απροσδόκητο διακριτικό ‘(‘.

Για να διορθώσετε το σφάλμα, πρέπει να διαγράψετε τους χαρακτήρες επιστροφής μεταφοράς χρησιμοποιώντας το εργαλείο γραμμής εντολών DOS σε Unix ως μετατροπέα μορφής αρχείου κειμένου. Πληκτρολογήστε την ακόλουθη εντολή ως dos2unix.exe example.sh στο Terminal και μπορείτε να μετατρέψετε το αρχείο σε μορφή Unix.

***

Το άρθρο έχει συζητήσει τις βασικές μεθόδους για τη διόρθωση του συντακτικού σφάλματος Bash κοντά σε απροσδόκητο διακριτικό ‘(‘ στο σενάριο. Εάν χρησιμοποιείτε Linux Bash, μπορείτε να χρησιμοποιήσετε τις μεθόδους που περιγράφονται σε αυτήν την ενότητα για να διορθώσετε το συντακτικό σφάλμα Bash κοντά σε μη αναμενόμενο διακριτικό. Εάν χρησιμοποιείτε έχετε διαβάσει ολόκληρο το άρθρο και βρήκατε το περιεχόμενο χρήσιμο, ενημερώστε μας για τις προτάσεις και τις απορίες σας στην ενότητα σχολίων.

  Ενεργοποιήστε ενέργειες σε πολλές εφαρμογές για να αυτοματοποιήσετε τη ροή εργασίας σας με το Zapier