Το Bash (Bourne Again Shell) είναι μια γραμμή εντολών και μια γλώσσα δέσμης ενεργειών σε λειτουργικά συστήματα GNU/Linux. Είναι το προεπιλεγμένο κέλυφος για τις περισσότερες διανομές Linux.
Όπως οι περισσότερες γλώσσες δέσμης ενεργειών, το Bash παρέχει συντάξεις βρόχου για να επαναλάβετε παρόμοιες εργασίες πολλές φορές. Σε αυτό το άρθρο, θα μάθουμε πώς να το χρησιμοποιούμε Για
βρόχος στο Bash.
Εισαγωγή
Ένα τυπικό σενάριο Bash περιέχει μια σειρά από εντολές που πρέπει να εκτελεστούν η μία μετά την άλλη. Οι μεταβλητές μπορούν να χρησιμοποιηθούν για την αποθήκευση συμβολοσειρών, τιμών ευρετηρίου ακεραίων, αποτελεσμάτων μιας εντολής κ.λπ. Απαιτούνται βρόχοι όταν ο χρήστης θέλει να εκτελέσει μια συγκεκριμένη εντολή πολλές φορές. Είναι ιδιαίτερα χρήσιμο όταν η έξοδος μιας εντολής έχει τη μορφή λίστας και σε κάθε αποτέλεσμα, στη λίστα, πρέπει να εκτελεστεί μια δεύτερη εντολή.
Γενική Σύνταξη
Η γενική σύνταξη για Για
Ο βρόχος στο Bash είναι:
για σε κάνει ... ... έγινε
Εδώ, το είναι μια μεταβλητή Bash, η οποία πρέπει να είναι ένα έγκυρο όνομα μεταβλητής κελύφους Linux, δηλαδή, το όνομα περιέχει έναν συνδυασμό γραμμάτων (az, AZ), αριθμών (0-9) και υπογράμμισης ( _ ) και πρέπει να ξεκινά είτε με ένα γράμμα ή μια υπογράμμιση.
ο είναι είτε ένα προσαρμοσμένο εύρος ευρετηρίων ακεραίων που θα επαναληφθεί είτε μια προσαρμοσμένη λίστα ακεραίων ή συμβολοσειρών. Μπορεί επίσης να περιέχει μια άλλη εντολή Linux, ωστόσο, η έξοδος μιας τέτοιας εντολής πρέπει να διαχωρίζεται με κενά ή χαρακτήρες νέας γραμμής, δηλαδή, να αναλύεται από το Bash σε μια λίστα (Μια λίστα στο Bash είναι βασικά μια συλλογή τιμών που χωρίζονται με ένα διάστημα ή μια νέα γραμμή ).
Όποια εντολή πρόκειται να εκτελεστεί πρέπει να τοποθετηθεί μέσα στο κάνω..έγινε
ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ.
Ας δούμε μερικά απλά παραδείγματα.
Βρόχος σε ένα εύρος τιμών ακέραιων αριθμών: Ο παρακάτω κώδικας δημιουργεί καταλόγους με όνομα dir1, dir2, dir3 έως dir10.
για i στο {1..10} κάνω mkdir dir$i γίνει
Επανάληψη σε μια λίστα σταθερών τιμών: Ο παρακάτω κώδικας εκτυπώνει κάθε συμβολοσειρά ή ακέραιο στη δεδομένη σταθερή λίστα.
for i in Hello 1 2 3 Αντίο! κάνε ηχώ $i έγινε
Βρόχος στην έξοδο μιας εντολής: Ο ακόλουθος κώδικας βρίσκεται σε βρόχο στην έξοδο του ls
και εκτυπώνει το όνομα κάθε αρχείου στη συγκεκριμένη μορφή.
για το i στο `ls` do echo "Το όνομα αρχείου είναι $i" έγινε
Σύνταξη βασισμένη στην έκφραση
Μια σύνταξη που βασίζεται σε εκφράσεις παρόμοια με τη γλώσσα προγραμματισμού C είναι επίσης δυνατή στο Bash:
για ((Έκφραση 1; Έκφραση 2; Έκφραση 3)) κάνω ... ... έγινε
Εδώ, Έκφραση 1
είναι η αρχικοποίηση της μεταβλητής(ών) του δείκτη. Έκφραση 2
είναι η συνθήκη κατά την οποία πρέπει να βγείτε από τον βρόχο. αυτή η συνθήκη ελέγχεται σε κάθε επανάληψη. Έκφραση 3
καθορίζει την αύξηση/μείωση/τροποποίηση στην τιμή της μεταβλητής(ών) δείκτη
Το παρακάτω παράδειγμα απλώς εκτυπώνει τιμές από 0 έως 4:
για ((i=0;i<5;i++)) do echo $i έγινε
Το παρακάτω παράδειγμα δημιουργεί έναν άπειρο βρόχο, καθώς δεν προσδιορίζονται εκφράσεις:
για (( ; ; )) κάντε echo "Πατήστε Ctrl-C για να σταματήσετε".
Διάλειμμα και Συνέχεια
Δήλωση διακοπής για έξοδο υπό όρους
Μπορούμε επίσης να χρησιμοποιήσουμε τη δήλωση υπό όρους αν
μέσα στον βρόχο. ο αν
η δήλωση μπορεί να χρησιμοποιηθεί με α Διακοπή
δήλωση, για έξοδο υπό όρους από τον βρόχο.
για ((i=0;i<10;i++)) κάντε εάν [[ $i -eq 5 ]] τότε σπάστε αλλιώς echo $i; fi τελειώσει
Ο παραπάνω βρόχος θα εκτυπώσει αριθμούς από το 0 έως το 4. Στη συνέχεια, όταν η τιμή του i είναι 5, θα βγει από τον βρόχο. Αυτό είναι ιδιαίτερα χρήσιμο όταν πρόκειται να βγείτε από έναν βρόχο όταν μια εντολή δίνει μια συγκεκριμένη έξοδο. Για παράδειγμα, ο ακόλουθος βρόχος διακόπτεται εάν και όταν βρει ένα κενό αρχείο.
για αρχείο σε `ls` do flen=`wc -c $file` if [[ "$flen" = "0 $file" ]] τότε echo "$file είναι κενό" break other echo $flen fi ολοκληρωμένο
Η εντολή wc -c
εκτυπώνει τον αριθμό των γραμμών στο αρχείο . Το εκτυπώνει σε μορφή
, για παράδειγμα,
10 test.txt
. Ξεφεύγουμε από τον βρόχο όταν ο αριθμός των γραμμών είναι 0, δηλαδή ένα κενό αρχείο.
Συνέχεια δήλωσης για παράλειψη επανάληψης υπό όρους
Παρόμοια με την C και πολλές άλλες γλώσσες προγραμματισμού, το bash έχει επίσης ένα να συνεχίσει
δήλωση, για να παραλείψετε το υπόλοιπο μέρος μιας επανάληψης σε έναν βρόχο εάν ικανοποιείται μια συγκεκριμένη συνθήκη.
για ((i=0;i<10;i++)) κάντε εάν [[ $i -eq 5 ]] τότε συνεχίστε fi echo $i; Ολοκληρώθηκε
Ο παραπάνω βρόχος θα εκτυπώσει αριθμούς από το 0 έως το 10, εκτός από το 5, γιατί κατά την επανάληψη του i=5
υπάρχει μια δήλωση συνέχεια, η οποία θα παρακάμψει τον υπόλοιπο κώδικα στον βρόχο στην αρχή με την επανάληψη του i=6
.
Στο παρακάτω παράδειγμα, εκτυπώνουμε τον αριθμό των γραμμών σε ένα αρχείο και μια συγκεκριμένη επανάληψη θα να συνεχίσει
αν είναι κατάλογος και όχι αρχείο.
για αρχείο σε `ls` κάντε εάν [[ -d $file ]], συνεχίστε με wc -c "$file" ολοκληρωθεί
[[ -d $αρχείο ]]
ελέγχει εάν το αρχείο είναι κατάλογος. Εάν είναι, τότε μεταβαίνουμε στο επόμενο αρχείο, δηλαδή στην επόμενη επανάληψη. Εάν δεν είναι κατάλογος, εκτυπώνουμε τον αριθμό των γραμμών στο αρχείο χρησιμοποιώντας τουαλέτα
εντολή, όπως φαίνεται και προηγουμένως.
Χρήση βρόχων: Σενάρια και γραμμή εντολών
Η σύνταξη βρόχου μπορεί να χρησιμοποιηθεί στο κέλυφος Bash απευθείας ή από ένα αρχείο σεναρίου φλοιού. Μιά φορά Για
Η σύνταξη βρόχου εισάγεται στο κέλυφος, το κέλυφος συνεχίζει την προτροπή για να επιτρέψει στον χρήστη να συνεχίσει τις εντολές που πρόκειται να επαναληφθούν.
Διαφορετικά, ο χρήστης μπορεί να το αποθηκεύσει σε ένα αρχείο σεναρίου και να εκτελέσει το αρχείο σεναρίου.
ο #!/bin/bash
στην αρχή καθορίζει τον διερμηνέα που θα χρησιμοποιηθεί κατά την εκτέλεση του αρχείου. Αν και το Bash είναι το πιο συχνά χρησιμοποιούμενο κέλυφος στις μέρες μας, ορισμένοι χρήστες προτιμούν κοχύλια όπως zsh
, το οποίο θα πρέπει να καθοριστεί στη θέση του bash στην αρχή αυτού του αρχείου.
Για να δώσετε δικαιώματα εκτέλεσης για αυτό το αρχείο, εκτελέστε:
chmod +x test.sh
Τελικά, για να εκτελέσετε το αρχείο, τρέξιμο:
./test.sh
συμπέρασμα
ο Για
Ο βρόχος στο Bash είναι ένα αρκετά απλό χαρακτηριστικό, αλλά χρησιμοποιείται σε σχεδόν κάθε είδος σύνθετου σεναρίου δέσμης ενεργειών. Η εκμάθησή του είναι πολύ σημαντική είτε είστε τακτικός είτε προχωρημένος χρήστης Linux είτε αρχίζετε να μαθαίνετε την αυτοματοποίηση για εργασίες διαχείρισης συστήματος και DevOps.