Χρησιμοποιώντας τον βρόχο «while» στη δέσμη ενεργειών Bash για επανάληψη πάνω από εντολές.
Το Bash (Bourne Again Shell) είναι μια γραμμή εντολών και μια γλώσσα δέσμης ενεργειών σε λειτουργικά συστήματα GNU/Linux. Είναι το προεπιλεγμένο κέλυφος για τις περισσότερες διανομές Linux.
Όπως οι περισσότερες γλώσσες δέσμης ενεργειών, το Bash παρέχει συντάξεις βρόχου για επανάληψη παρόμοιας εργασίας πολλές φορές. Σε αυτό το άρθρο θα μάθουμε πώς να χρησιμοποιούμε το ενώ
βρόχος στο Bash.
Εισαγωγή
ο ενώ
Ο βρόχος στο Bash χρησιμοποιείται για την εκτέλεση εντολών (εκτελεσμένων εντολών) πολλές φορές με βάση την έξοδο άλλης εντολής (εντολές συνθήκης). Οι εντολές που εκτελούνται θα συνεχίσουν να εκτελούνται έως ότου η εντολή συνθήκης εκτελεστεί με επιτυχία (δηλαδή, επιστρέφει κατάσταση 0. Οποιαδήποτε εντολή στο Linux επιστρέφει 0 για επιτυχία και μη μηδενικό ακέραιο για αποτυχία).
Εάν υπάρχουν πολλές εντολές συνθήκης, η δήλωση λαμβάνει υπόψη μόνο την κατάσταση της τελευταίας εντολής στη λίστα, δηλαδή, ο βρόχος εκτελείται μέχρι να εκτελεστεί με επιτυχία η τελευταία εντολή στη λίστα.
Γενική Σύνταξη
Η γενική σύνταξη για ενώ
Ο βρόχος στο Bash είναι:
ενώ να γίνει
Η λίστα εντολών execute θα συνεχίσει να εκτελείται μέχρι να εκτελεστεί με επιτυχία η τελευταία εντολή στη λίστα εντολών συνθήκης και να εξέλθει με την κατάσταση 0. Στην επανάληψη, όταν η τελευταία εντολή συνθήκης αποτύχει, ο βρόχος εξέρχεται.
Ο χρήστης μπορεί να καθορίσει οποιοδήποτε εκτελέσιμο αρχείο στις λίστες εντολών. Μπορεί να είναι τυπικά προγράμματα Linux ή προσαρμοσμένα προγράμματα χρήστη ή σενάρια. Κάθε εντολή θα πρέπει να βρίσκεται είτε σε μια νέα γραμμή είτε να χωρίζεται με ένα ερωτηματικό στην ίδια γραμμή.
Ας δούμε λίγα παραδείγματα.
Ο βρόχος έως ότου μια μεταβλητή έχει μια συγκεκριμένη τιμή: Ο παρακάτω βρόχος εκτελείται μέχρι την τιμή της μεταβλητής Χ
δεν ισούται με 10.
x=0 ενώ [[ $x -ne 10 ]] do echo $x ((x++)) έχει ολοκληρωθεί
Σε κάθε επανάληψη, ελέγχουμε αν η τιμή του x είναι 10. Η τιμή ελέγχεται χρησιμοποιώντας το δοκιμή
εντολή. [[ Έκφραση ]]
είναι η σύνταξη για την εντολή δοκιμής (Βλ τεστ ανδρών
). Εδώ αφού χρησιμοποιούμε το -νε
τελεστής (που σημαίνει «όχι ίσο με»), η εντολή δοκιμής επιστρέφει 0, δηλ. επιτυχία, εάν η τιμή του x δεν είναι 10, και επιστρέφει μια μη μηδενική τιμή, δηλ. αποτυχία εάν η τιμή του x είναι 10.
Στη συνέχεια μέσα στο κάνει...έγινε
μπλοκ, εκτυπώνουμε την τιμή του x και την αυξάνουμε. Μόλις η τιμή του x είναι 10, η εντολή δοκιμής επιστρέφει μη μηδενική κατάσταση και ο βρόχος εξέρχεται.
Σημείωση: Η μεταβλητή ευρετηρίου που θα χρησιμοποιηθεί στον βρόχο while πρέπει να αρχικοποιηθεί είτε πριν από τον βρόχο while είτε στις εντολές συνθήκης, σε αντίθεση με τον βρόχο for, που επιτρέπει την σιωπηρή προετοιμασία μιας μεταβλητής.
Με πολλαπλές εντολές συνθηκών: Ο ακόλουθος βρόχος δημιουργεί 5 καταλόγους με όνομα dir0, dir1, ... dir4
.
z=0 while echo "Λίστα αρχείων:" ls -l [[ $z -ne 5 ]] do echo "Δημιουργία dir$z..." mkdir dir$z ((z++)) έγινε
Πρώτες εντολές echo "Λίστα αρχείων:"
και ls -l
θα εκτελεστεί μία φορά πλήρως. Η επιτυχία ή η αποτυχία τους δεν έχει καμία απολύτως επίδραση στο πόσο θα διαρκέσει ο βρόχος.
Στη συνέχεια θα εκτελεστεί η εντολή δοκιμής για τον έλεγχο της τιμής της μεταβλητής z. Μέχρι η τιμή του z να μην είναι 5, η εντολή δοκιμής επιστρέφει την κατάσταση επιτυχίας και ως εκ τούτου ο βρόχος συνεχίζει να εκτελείται. Οι εντολές συνθήκης και οι εντολές που εκτελούνται συνεχίζουν να εκτελούνται με τη σειρά. Εδώ, για κάθε επανάληψη, θα εκτελεί πρώτα την εντολή echo και την εντολή ls σε κατάσταση και, στη συνέχεια, θα ελέγχει την εντολή 3ης συνθήκης για την τιμή του z. Αν δεν είναι 5, μπαίνει στον βρόχο και εκτελεί τις εντολές που δίνονται.
Διάλειμμα και Συνέχεια
Δήλωση διακοπής για έξοδο υπό όρους
Μπορούμε επίσης να χρησιμοποιήσουμε τη δήλωση υπό όρους αν
μέσα στον βρόχο. ο αν
η δήλωση μπορεί να χρησιμοποιηθεί με α Διακοπή
δήλωση, για έξοδο υπό όρους από τον βρόχο.
x=0 ενώ το [[ $x -ne 10 ]] κάνει εάν [[ $x -eq 5 ]] break fi echo $x ((x++)) έχει ολοκληρωθεί
Ο παραπάνω βρόχος while θα εκτυπώσει αριθμούς από το 0 έως το 4. Στη συνέχεια, όταν η τιμή του i είναι 5, θα βγει από τον βρόχο. Αυτό είναι ιδιαίτερα χρήσιμο όταν πρόκειται να βγείτε από έναν βρόχο όταν μια εντολή δίνει μια συγκεκριμένη έξοδο.
Συνέχεια δήλωσης για παράλειψη επανάληψης υπό όρους
Το Bash έχει επίσης ένα να συνεχίσει
δήλωση, για να παραλείψετε το υπόλοιπο μέρος μιας επανάληψης σε έναν βρόχο εάν ικανοποιείται μια συγκεκριμένη συνθήκη.
x=0 ενώ [[ $x -ne 10 ]] κάντε εάν [[ $x -eq 5 ]] συνεχίσετε fi echo $x ((x++)) ολοκληρωθεί
Ο παραπάνω βρόχος θα εκτυπώσει αριθμούς από το 0 έως το 10, εκτός από το 5, γιατί κατά την επανάληψη του x=5
υπάρχει μια δήλωση συνέχεια, η οποία θα παρακάμψει τον υπόλοιπο κώδικα στον βρόχο στην αρχή με την επανάληψη του x=6
.
Χρήση βρόχων: Σενάρια και γραμμή εντολών
Οι συντάξεις βρόχου μπορούν να χρησιμοποιηθούν στο κέλυφος Bash απευθείας ή από ένα εκτελέσιμο αρχείο σεναρίου φλοιού. Παρόμοιο με Για
και ενώ
βρόχους, μια φορά ένα ενώ
Η σύνταξη βρόχου εισάγεται στο κέλυφος, το κέλυφος συνεχίζει την προτροπή για να επιτρέψει στον χρήστη να συνεχίσει τις εντολές που πρόκειται να επαναληφθούν.
Διαφορετικά, ο χρήστης μπορεί να το αποθηκεύσει σε ένα αρχείο σεναρίου και να εκτελέσει το αρχείο σεναρίου.
ο #!/bin/bash
στην αρχή καθορίζει τον διερμηνέα που θα χρησιμοποιηθεί κατά την εκτέλεση του αρχείου. Αν και το Bash είναι το πιο συχνά χρησιμοποιούμενο κέλυφος στις μέρες μας, ορισμένοι χρήστες προτιμούν κοχύλια όπως zsh
, το οποίο θα πρέπει να καθοριστεί στη θέση του bash στην αρχή αυτού του αρχείου.
Για να δώσετε δικαιώματα εκτέλεσης για αυτό το αρχείο, εκτελέστε:
chmod +x test.sh
Τελικά, για να εκτελέσετε το αρχείο, τρέξιμο:
./test.sh
συμπέρασμα
ο ενώ
βρόχος, παρόμοιος με Για
και μέχρι
Οι βρόχοι είναι ένα σημαντικό χαρακτηριστικό στο σενάριο του Bash. Ενώ ο βρόχος έχει παρόμοια χρήση με τον βρόχο μέχρι, εκτός από το ότι χρησιμοποιείται για την εκτέλεση εναλλακτικών εντολών/προγραμμάτων όταν ένα συγκεκριμένο πρόγραμμα πετυχαίνει. Αυτό συχνά βρίσκει τη χρησιμότητά του σε προηγμένα σενάρια δικτύωσης, σενάρια συντήρησης συστήματος κ.λπ.