Δήλωση Bash 'if other': Εκμάθηση και Παραδείγματα

Χρησιμοποιώντας τη δήλωση if…else στο Bash για την εκτέλεση κώδικα υπό όρους.

Το Bash (Bourne Again Shell) είναι μια γραμμή εντολών και μια γλώσσα δέσμης ενεργειών σε λειτουργικά συστήματα GNU/Linux. Είναι το προεπιλεγμένο κέλυφος για τις περισσότερες διανομές Linux.

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

Εισαγωγή

ο αν...αλλιώς Η δήλωση στο Bash επιτρέπει στο χρήστη να χειρίζεται τη ροή του κώδικα βάσει συνθηκών. Ο χρήστης μπορεί να καθορίσει ξεχωριστά μπλοκ κώδικα που θα εκτελεστούν, μόνο ένα από τα οποία τελικά θα εκτελεστεί κατά τη διάρκεια του χρόνου εκτέλεσης, με βάση την αντίστοιχη συνθήκη που ικανοποιείται.

Σημειώστε ότι, μπορούν να καθοριστούν περισσότερες από δύο συνθήκες, για τις οποίες ελιφ μπορεί να χρησιμοποιηθεί δήλωση. Ο χρήστης μπορεί να δώσει οποιονδήποτε αριθμό συνθηκών χρησιμοποιώντας ελιφ, και τέλος μια προεπιλεγμένη συνθήκη χρησιμοποιώντας αλλού ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ. Ας δούμε περισσότερα σχετικά με αυτό στη σύνταξη και τα παραδείγματα παρακάτω.

Γενική Σύνταξη

Η γενική σύνταξη για αν...αλλιώς Η δήλωση στο Bash είναι:

αν τότε  αλλού  fi

Εδώ, αν το ικανοποιεί, δηλ., εάν επιστρέψει 0 (επιτυχία), τότε εκτελείται το μπλοκ κώδικα 1. Εάν η συνθήκη δεν επιστρέψει 0, δηλ. επιστρέφει μια κατάσταση αποτυχίας, τότε εκτελείται το μπλοκ κώδικα 2. ο αν...αλλιώς το μπλοκ τελειώνει με α fi δήλωση.

Για πολλαπλά μπλοκ που αντιστοιχούν σε πολλαπλές συνθήκες,ελιφ χρησιμοποιείται:

αν τότε  elif τότε  elif τότε  ... ...άλλο  fi

Εδώ, οι συνθήκες ελέγχονται με τη σειρά και εκτελείται το μπλοκ κώδικα της πρώτης συνθήκης που επιστρέφει την κατάσταση 0 (επιτυχία). Π.χ. αν επιστρέφει μη μηδενική κατάσταση (αποτυχία), τότε ελέγχεται. Αν επιστρέφει την κατάσταση 0, εκτελείται. Μετά από αυτό, οι περαιτέρω συνθήκες δεν ελέγχονται και η εκτέλεση του κώδικα συνεχίζεται στον κώδικα μετά το fi δήλωση.

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

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

Παραδείγματα

Για να εκτελέσετε ένα μπλοκ κώδικα εάν μια μεταβλητή έχει συγκεκριμένη τιμή:

x=0 εάν [ $x -eq 0 ] τότε ηχώ "Η τιμή του X είναι 0" αλλιώς ηχώ "Η τιμή του X δεν είναι 0" fi

Για να ελέγξετε για πολλαπλές τιμές:

x=2 εάν [ $x -eq 0 ] τότε ηχώ "Η τιμή του X είναι 0" elif [ $x -eq 1 ] τότε ηχώ "Η τιμή του X είναι 1" elif [ $x -eq 2 ] και μετά ηχώ "Τιμή του Το X είναι 2" αλλιώς ηχώ "Η τιμή του Χ δεν είναι 0" fi

Οι συνθήκες μπορεί να είναι οποιεσδήποτε εντολές Linux. Το αντίστοιχο μπλοκ κώδικα θα εκτελεστεί εάν η εντολή εκτελεστεί με επιτυχία.

αν npm -v τότε επαναλάβετε "NPM υπάρχει στο σύστημα" αλλιώς sudo apt install npm fi

Στο παραπάνω παράδειγμα, αφού npm δεν εγκαταστάθηκε στο σύστημα, η εντολή npm -v επέστρεψε μη μηδενική κατάσταση. Ως εκ τούτου, η εκτέλεση του κώδικα μπήκε στο αλλού μπλοκ, όπου εγκαθιστούμε npm χρησιμοποιώντας κατάλληλος διαχειριστής πακέτων. Όπως μπορούμε να δούμε, μου ζήτησε να εισάγω τον κωδικό πρόσβασης και ξεκίνησε η εγκατάσταση του npm.

Μπορούμε επίσης να φωλιάζουμε ένα άλλο αν...αλλιώς μπλοκ μέσα σε ένα αν, αλλού ή ελιφ ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ:

x=0 y=1 αν [ $x -eq 0 ] τότε ηχώ "X είναι 0" αν [ $y -eq 1 ] τότε ηχώ "Y είναι 1" αλλιώς ηχώ "Y δεν είναι 1" fi αλλιώς ηχώ "Χ είναι όχι 0" fi

Αυτό είναι χρήσιμο όταν πρόκειται να ελεγχθεί ένα ξεχωριστό σύνολο συνθηκών μόλις ικανοποιηθεί μια αρχική συνθήκη.

Για παράδειγμα, ο ακόλουθος κώδικας προσπαθεί να εγκαταστήσει ένα λογισμικό διακομιστή web:

αν nginx -v τότε ηχώ "Το NGINX είναι ήδη εγκατεστημένο." Διαφορετικά, εάν το sudo apt εγκαταστήσετε το nginx, τότε επαναλάβετε "επιτυχής εγκατάσταση NGINX". elif sudo apt install apache2 και μετά επαναλάβετε "επιτυχής εγκατάσταση του APACHE2." else echo "Δεν είναι δυνατή η εγκατάσταση οποιουδήποτε λογισμικού ιστού." fi

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

Εάν για κάποιο λόγο, το Nginx δεν μπορούσε να εγκατασταθεί στο σύστημα από το πακέτο, προσπαθεί να εγκαταστήσει το Apache2. Εάν ακόμη και το Apache2 δώσει σφάλμα κατά την εγκατάσταση, βγαίνει εμφανίζοντας ένα μήνυμα ότι δεν ήταν δυνατή η εγκατάσταση λογισμικού.

Με παρόμοιο τρόπο, ένα ένθετο μπλοκ μπορεί να χρησιμοποιηθεί μέσα σε ένα ελιφ μπλοκ επίσης.

Εκτέλεση αν...αλλιώς: Σενάρια και γραμμή εντολών

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

Ο χρήστης μπορεί επίσης να αποθηκεύσει αυτόν τον κώδικα σε ένα αρχείο σεναρίου και να εκτελέσει το αρχείο σεναρίου.

ο #!/bin/bash στην αρχή καθορίζει τον διερμηνέα που θα χρησιμοποιηθεί κατά την εκτέλεση του αρχείου. Αν και το Bash είναι το πιο συχνά χρησιμοποιούμενο κέλυφος στις μέρες μας, ορισμένοι χρήστες προτιμούν κελύφη όπως το zsh, το οποίο θα πρέπει να προσδιορίζεται στη θέση του bash στην αρχή αυτού του αρχείου.

Για να δώσετε δικαιώματα εκτέλεσης για αυτό το αρχείο, εκτελέστε:

chmod +x test.sh

Τέλος, για να εκτελέσετε το αρχείο, εκτελέστε:

./test.sh

συμπέρασμα

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

Κατηγορία: Linux