9 Παραδείγματα για βρόχους σε σενάρια Linux Bash
Βασικά Takeaways
- Ο βρόχος Bash for είναι ένα ευέλικτο εργαλείο που μπορεί να λειτουργήσει με αριθμούς, λέξεις, πίνακες, μεταβλητές γραμμής εντολών ή την έξοδο άλλων εντολών.
- Οι βρόχοι Simple for μπορούν να χρησιμοποιηθούν με αριθμητικές λίστες ή λίστες λέξεων, επιτρέποντάς σας να επαναλάβετε ένα τμήμα κώδικα για κάθε τιμή στη λίστα.
- Ο βρόχος for μπορεί επίσης να χρησιμοποιηθεί με εύρη αριθμών, ονόματα αρχείων, παραμέτρους γραμμής εντολών, πίνακες λέξεων και συσχετιστικούς πίνακες, παρέχοντας ευελιξία στις εργασίες δέσμης ενεργειών.
Το ευέλικτο Bash
for
Ο βρόχος κάνει πολύ περισσότερα από τον βρόχο γύρω από έναν καθορισμένο αριθμό φορών. Περιγράφουμε τις πολλές παραλλαγές του, ώστε να μπορείτε να τις χρησιμοποιήσετε με επιτυχία στα δικά σας σενάρια
Linux
.
Το for Loop
Όλες οι γλώσσες δέσμης ενεργειών και προγραμματισμού έχουν κάποιο τρόπο χειρισμού βρόχων. Ένας βρόχος είναι ένα τμήμα κώδικα που θέλετε να έχετε εκτελεσθεί επανειλημμένα. Αντί να πληκτρολογείτε το ίδιο σύνολο οδηγιών στο σενάριο σας, ξανά και ξανά, ένας βρόχος θα επαναλαμβάνει ένα τμήμα κώδικα ξανά και ξανά για εσάς.
The Bash
for
Ο βρόχος είναι πολύ ευέλικτος. Μπορεί να λειτουργήσει με αριθμούς, λέξεις, πίνακες, μεταβλητές γραμμής εντολών ή την έξοδο άλλων εντολών. Αυτά χρησιμοποιούνται στην κεφαλίδα του βρόχου. Η κεφαλίδα υπαγορεύει με τι δουλεύει ο βρόχος — αριθμούς ή συμβολοσειρές, για παράδειγμα — και ποια είναι η τελική συνθήκη που θα σταματήσει τον βρόχο.
Το σώμα του βρόχου περιέχει τον κώδικα που θέλετε να έχετε επαναλάβει. Κρατάει αυτό που θέλετε να κάνει ο βρόχος. Το σώμα του βρόχου μπορεί να περιέχει οποιαδήποτε έγκυρη εντολή σεναρίου.
Μια μεταβλητή που ονομάζεται μετρητής βρόχου ή επαναλήπτης χρησιμοποιείται για να περάσει μέσα από ένα εύρος τιμών ή μια λίστα στοιχείων δεδομένων. Για κάθε βρόχο, ο επαναλήπτης παίρνει την τιμή του επόμενου αριθμού, συμβολοσειράς ή οποιουδήποτε τύπου δεδομένων στον οποίο επαναλαμβάνεται ο βρόχος. Αυτό επιτρέπει στον βρόχο να λειτουργεί με τις τιμές καθενός από τα στοιχεία δεδομένων με τη σειρά του ή ακόμα και σε ορισμένες περιπτώσεις να χειρίζεται τα ίδια τα στοιχεία δεδομένων.
Απλό για Loops
Αν θέλετε να γράψετε τον πρώτο σας βρόχο for, αυτά τα απλά παραδείγματα θα σας βοηθήσουν να ξεκινήσετε.
για βρόχους που χρησιμοποιούν αριθμητικές λίστες
Μπορείτε να εκτελέσετε ένα
for
βρόχο στη γραμμή εντολών. Αυτή η εντολή δημιουργεί και εκτελεί ένα απλό
for
βρόχος. Ο επαναλήπτης είναι μια μεταβλητή που ονομάζεται
i
. Θα αναθέσουμε
i
να είναι καθεμία από τις τιμές στη λίστα των αριθμών, με τη σειρά της. Το σώμα του βρόχου πρόκειται να εκτυπώσει αυτήν την τιμή στο παράθυρο τερματικού. Η συνθήκη που τερματίζει αυτόν τον βρόχο είναι πότε
i
έχει επαναληφθεί σε ολόκληρη τη λίστα των αριθμών.
for i in 1 2 3 4 5; do echo $i; done
Είναι σημαντικό να σημειωθεί εδώ ότι η μεταβλητή
i
αυξάνεται κατά ένα κάθε φορά που ο βρόχος περιστρέφεται, αλλά αυτό συμβαίνει επειδή η λίστα των αριθμών αυξάνεται κατά ένα κάθε φορά.
Αυτή η λίστα αριθμών ξεκινά από το 3 και ανεβαίνει σε βήματα των δύο, στη συνέχεια πηδά αυθαίρετα στο 44.
for i in 3 5 7 9 11 44; do echo $i; done
Δεν έχει καμία διαφορά στο
for
βρόχος. Ξεκινά από το ένα άκρο της λίστας και χρησιμοποιεί κάθε τιμή με τη σειρά, μέχρι να χρησιμοποιηθούν όλες οι τιμές στη λίστα.
Ούτε οι αριθμοί χρειάζεται να είναι σε αύξουσα σειρά. Μπορούν να είναι σε οποιαδήποτε σειρά.
for i in 3 43 44 11 9; do echo $i; done
για βρόχους που χρησιμοποιούν λίστες λέξεων
Το ίδιο εύκολα μπορούμε να κάνουμε και με τις λέξεις. Αντιγράψτε το κείμενο του σεναρίου σε ένα πρόγραμμα επεξ
εργασία
ς και αποθηκεύστε το ως “word-list.sh.”
#!/bin/bash
for word in This is a sequence of words
do
echo $word
done
Θα χρειαστεί να χρησιμοποιήσετε
chmod
για να κάνετε το σενάριο εκτελέσιμο και οποιοδήποτε άλλο σενάριο που αντιγράφετε από αυτό το άρθρο. Απλώς αντικαταστήστε το όνομα του σεναρίου κάθε φορά που χρησιμοποιείτε το
chmod
εντολή.
chmod +x word-list.sh
Ας τρέξουμε το σενάριο.
./word-list.sh
Ακριβώς όπως έγινε με τους αριθμούς, ο επαναλήπτης — σε αυτό το παράδειγμα, η μεταβλητή
word
—Διασχίζει τη λίστα των στοιχείων δεδομένων μέχρι να φτάσει στο τέλος της λίστας. Το σώμα του βρόχου έχει πρόσβαση στην τιμή στο
word
μεταβλητή και έτσι κάθε λέξη στη λίστα υποβάλλεται σε επεξεργασία.
για βρόχους με εύρη αριθμών
Αν ήθελες α
for
βρόχος για να τρέξει 100 φορές θα ήταν πολύ κουραστικό να πρέπει να πληκτρολογήσετε μια ακολουθία 100 αριθμών στην κεφαλίδα του βρόχου. Τα εύρη αριθμών σάς επιτρέπουν να καθορίσετε μόνο τον πρώτο και τον τελευταίο αριθμό.
Αυτό το σενάριο είναι “number-range.sh.”
#!/bin/bash
for i in {1..10}
do
echo "Loop spin:" $i
done
Το εύρος αριθμών ορίζεται μέσα σε αγκύλες “
{}
«με δύο περιόδους»
..
” Διαχωρίζοντας τους αριθμούς που ξεκινούν και τελειώνουν το εύρος. Βεβαιωθείτε ότι δεν έχετε συμπεριλάβει κανένα κενό διάστημα στον ορισμό του εύρους.
Έτσι τρέχει:
./number-range.sh
Μπορείτε να συμπεριλάβετε έναν άλλο αριθμό που καθορίζει το μέγεθος βήματος που πρέπει να χρησιμοποιήσει ο επαναλήπτης για να περιηγηθεί στους αριθμούς στο εύρος. Αυτό το σενάριο, “number-range2.sh” θα χρησιμοποιεί εύρος από 0 έως 32 και μέγεθος βήματος 4.
#!/bin/bash
for i in {0..32..4}
do
echo "Loop spin:" $i
done
Ο επαναλήπτης διασχίζει το εύρος αριθμών σε άλματα των τεσσάρων.
./number-range2.sh
για βρόχους που χρησιμοποιούν ονόματα αρχείων
Επειδή μπορούμε να επεξεργαστούμε λίστες λέξεων, μπορούμε να κάνουμε τα σενάρια μας να λειτουργούν με ονόματα αρχείων. Αυτό το σενάριο ονομάζεται “filenames.sh.”
#!/bin/bash
for file in word-list.sh number-range.sh number-range2.sh filenames.sh
do
ls -lh "$file"
done
Θα ήταν πολύ άσκοπο να έχουμε ένα σενάριο που κάνει μόνο ό,τι
ls
μπορεί να κάνει, αλλά δείχνει πώς να αποκτήσετε πρόσβαση στα ονόματα αρχείων μέσα στο σώμα του βρόχου.
./filenames.sh
Με παρόμοιο τρόπο με τη χρήση του εύρους αριθμών, μπορούμε να χρησιμοποιήσουμε ένα μοτίβο αρχείου στην κεφαλίδα βρόχου για να καθορίσουμε τα αρχεία που θέλουμε να επεξεργαστούμε. Αυτό αποφεύγει την πολλή πληκτρολόγηση και σημαίνει ότι δεν χρειάζεται να γνωρίζουμε εκ των προτέρων τα ονόματα των αρχείων.
Αυτό το σενάριο ονομάζεται “filenames2.sh.” Αντικαταστήσαμε τη λίστα ονομάτων αρχείων με το μοτίβο ονομάτων αρχείου “*.sh” για να έχουμε την αναφορά σεναρίου σε όλα τα αρχεία σεναρίων στον τρέχοντα κατάλογο.
#!/bin/bash
for file in *.sh
do
ls -lh "$file"
done
Εδώ είναι η έξοδος.
./filenames2.sh
για βρόχους με χρήση παραμέτρων γραμμής εντολών
Μπορούμε να προσθέσουμε περισσότερη ευελιξία περνώντας το μοτίβο ονόματος αρχείου στη γραμμή εντολών. ο
$*
Η μεταβλητή αντιπροσωπεύει όλες τις παραμέτρους της γραμμής εντολών που μεταβιβάζονται στο σενάριο.
Αυτό είναι το “filenames3.sh.”
#!/bin/bash
for file in $*
do
ls -lh "$file"
done
Θα ζητήσουμε ονόματα αρχείων που ξεκινούν με “n” και έχουν επέκταση SH.
./filenames3.sh n*.sh
Μπορούμε επίσης να περάσουμε σε περισσότερα από ένα μοτίβα τη φορά.
./filenames3.sh n*.sh .bashrc
Η μεταβλητή iterator
file
παίρνει την τιμή καθεμιάς από τις παραμέτρους της γραμμής εντολών. Τα μοτίβα ονομάτων αρχείων επεκτείνονται και όλα τα ονόματα αρχείων υποβάλλονται σε επεξεργασία στο σώμα του βρόχου.
C-like για Loops
Το Bash υποστηρίζει τον κλασικό βρόχο for τριών όρων, όπως αυτοί που βρίσκονται στη γλώσσα προγραμματισμού C. Ονομάζονται βρόχοι τριών όρων επειδή υπάρχουν τρεις όροι στην κεφαλίδα του βρόχου.
- Η αρχική τιμή του επαναλήπτη βρόχου.
- Η δοκιμή για το αν ο βρόχος συνεχίζεται ή τελειώνει.
- Η αύξηση —ή μείωση — του επαναληπτικού.
Αυτό το σενάριο είναι “c-like.sh.”
Ο επαναληπτικός
I
ορίζεται στο 1 στην αρχή του βρόχου και ο βρόχος θα τρέχει για όσο διάστημα η πρόταση ”
“είναι αλήθεια. Μόλις
i
φτάνει το 11, το
for
ο βρόχος θα σταματήσει. Ο επαναλήπτης αυξάνεται κατά ένα, κάθε περιστροφή του βρόχου.
do
echo "Loop number:" $i
done
Ας τρέξουμε αυτό το σενάριο.
./c-like.sh
Το C-όπως
for
βρόχος επιτρέπει την εύκολη δημιουργία
for
βρόχους που έχουν ελαφρώς περίεργες απαιτήσεις. Αυτός ο βρόχος ξεκινά από το 15 και μετρά αντίστροφα σε βήματα των 3. Αυτό είναι “c-like2.sh”
#!/bin/bash
for (( i=15; i>0; i-=3 ))
do
echo "Loop number:" $i
done
Όταν το τρέχουμε, θα πρέπει να πηδήξει προς τα πίσω σε βήματα των τριών.
./c-like2.sh
Infinite for Loops
Μπορείτε επίσης να χρησιμοποιήσετε αυτήν τη μορφή
for
βρόχο για να δημιουργήσετε έναν άπειρο βρόχο. Το μόνο που χρειάζεται να κάνετε είναι να αφαιρέσετε όλα τα στοιχεία από την κεφαλίδα του βρόχου, όπως αυτό. Αυτό είναι “άπειρο.sh.”
#!/bin/bash
for (( ; ; ))
do
echo "Press Ctrl+C to stop..."
sleep 1
done
Θα χρειαστεί να πατήσετε Ctrl+C για να σταματήσετε τον βρόχο.
./infinite.sh
για βρόχους που χρησιμοποιούν πίνακες λέξεων
Μπορούμε εύκολα να επαναλάβουμε μέσα από μια σειρά λέξεων. Πρέπει να δώσουμε το όνομα του πίνακα στην κεφαλίδα του βρόχου και ο επαναλήπτης θα περπατήσει σε όλες τις εγγραφές στον πίνακα. Αυτό είναι “word-array.sh.”
#!/bin/bash
distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")
for distro in $distributions
do
echo $distro
done
Όλες οι διανομές παρατίθενται για εμάς.
./word-array.sh
Η εντολή συνέχειας
Εάν θέλετε ο βρόχος να υπερβαίνει μια συγκεκριμένη καταχώρηση, ελέγξτε εάν ο επαναλήπτης ταιριάζει με αυτήν την καταχώρηση και χρησιμοποιήστε το
continue
εντολή. ο
continue
εντολή εγκαταλείπει την τρέχουσα περιστροφή του βρόχου. Αυξάνει τον επαναλήπτη και ξεκινά την επόμενη περιστροφή του βρόχου — υποθέτοντας ότι η καταχώρηση που θέλετε να παραλείψετε δεν είναι το τελευταίο στοιχείο στη λίστα.
Αυτό είναι “word-array2.sh.” Περνάει πάνω από την καταχώρηση πίνακα “Arch”, αλλά επεξεργάζεται όλα τα άλλα μέλη του πίνακα.
#!/bin/bash
distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")
for distro in $distributionsdo
if [[ "$distro" == "Arch" ]] ;
then
continue
fi
echo $distro
done
Το “Arch” δεν εμφανίζεται στο παράθυρο τερματικού.
./word-array2.sh
Η εντολή διακοπής
ο
break
εντολή ξεφεύγει από τον βρόχο και αποτρέπει οποιαδήποτε περαιτέρω επεξεργασία.
Αυτό είναι “word-array3.sh.” Είναι το ίδιο με το προηγούμενο σενάριο
continue
αντικαταστάθηκε από
break
.
#!/bin/bash
distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")
for distro in $distributions
do
if [[ "$distro" == "Arch" ]] ;
then
break
fi
echo $distro
done
Όταν ο επαναλήπτης περιέχει “Arch”, ο βρόχος for εγκαταλείπει οποιαδήποτε περαιτέρω επεξεργασία.
./word-array3.sh
για βρόχους που χρησιμοποιούν συσχετιστικούς πίνακες
Στο Bash 4 και νεότερη έκδοση, οι συσχετιστικοί πίνακες σάς επιτρέπουν να δημιουργείτε λίστες με ζεύγη κλειδιών-τιμών που μπορούν να αναζητηθούν με το κλειδί ή την τιμή. Λόγω της αμφίδρομης σχέσης μεταξύ του κλειδιού και της τιμής, ονομάζονται επίσης λεξικά δεδομένων.
Μπορούμε να επαναλάβουμε μέσω ενός συσχετιστικού πίνακα χρησιμοποιώντας a
for
βρόχος. Αυτό το σενάριο είναι “associative.sh.” Ορίζει έναν συσχετιστικό πίνακα με τέσσερις εγγραφές, μία για καθεμία από τα “dog”, “cat”, “robin” και “human”. Αυτά είναι τα κλειδιά. Οι τιμές είναι ο (προεπιλεγμένος) αριθμός των σκελών που έχει το καθένα.
#!/bin/bashdeclare -A animals=( [dog]=Four-legged [cat]=Four-legged [robin]=Two-legged [human]=Two-legged )
for legs in ${!animals[@]}
do
if [ ${animals[$legs]} == "Two-legged" ]; then
echo ${legs}
fi
done
Ο επαναληπτικός καλείται
legs
. Σημειώστε ότι η κεφαλίδα βρόχου περιέχει ένα “
!
” θαυμαστικό. Αυτό δεν λειτουργεί ως ο λογικός τελεστής NOT, είναι μέρος της σύνταξης του συσχετιστικού πίνακα. Απαιτείται αναζήτηση μέσω του πίνακα.
Το σώμα του βρόχου εκτελεί μια δοκιμή σύγκρισης συμβολοσειρών. Εάν η τιμή του μέλους πίνακα είναι “Two-leged”, εκτυπώνει την τιμή κλειδιού στο παράθυρο τερματικού. Όταν το τρέχουμε, το σενάριο εκτυπώνει τα πλάσματα με δύο
πόδια
.
./associative.sh
Επανάληψη κατά την έξοδο των εντολών
Εάν έχετε μια εντολή ή μια ακολουθία εντολών που παράγουν μια λίστα με κάτι, όπως ονόματα αρχείων, μπορείτε να τις επαναλάβετε με ένα
for
βρόχος. Πρέπει να προσέχετε για απροσδόκητες επεκτάσεις ονομάτων αρχείων, αλλά σε απλές περιπτώσεις είναι εντάξει.
Αυτό το σενάριο είναι “command.sh.” χρησιμοποιεί
ls
και
wc
για να παρέχει μια ταξινομημένη λίστα ονομάτων αρχείων σεναρίων, μαζί με τον αριθμό των γραμμών, των λέξεων και των byte.
#!/bin/bashfor i in $(ls *.sh | sort);do echo $(wc $i)done
Όταν το τρέχουμε, παίρνουμε τα στατιστικά στοιχεία για κάθε αρχείο, με τα αρχεία να παρατίθενται με αλφαβητική σειρά.
./command.sh
The Dazzling for Loop
ο
for
Το loop είναι ένα ευέλικτο και εύκολα κατανοητό εργαλείο δέσμης ενεργειών. Αλλά όσο ευέλικτο κι αν είναι, μην ξεχνάτε ότι υπάρχουν άλλοι βρόχοι για κάποιο λόγο. Μην εκτυφλωθείτε να σκεφτείτε το
for
Ο βρόχος είναι το μόνο που θα χρειαστείτε.
ο
while
Ο βρόχος, για παράδειγμα, είναι πολύ καλύτερος για ορισμένα πράγματα από το
for
βρόχο, όπως η ανάγνωση γραμμών από ένα αρχείο.
Η σύνταξη καλών σεναρίων σημαίνει τη χρήση του καταλληλότερου εργαλείου για την εργασία. ο
for
Το loop είναι ένα εξαιρετικό εργαλείο που μπορείτε να έχετε στην εργαλειοθήκη των κόλπων σας.
VIA:
HowToGeek.com
