9 Παραδείγματα για βρόχους σε σενάρια Linux Bash

Βασικά Takeaways

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

Το ευέλικτο Bash

for

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

.

Το 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


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

Δεν έχει καμία διαφορά στο

for

βρόχος. Ξεκινά από το ένα άκρο της λίστας και χρησιμοποιεί κάθε τιμή με τη σειρά, μέχρι να χρησιμοποιηθούν όλες οι τιμές στη λίστα.

Ούτε οι αριθμοί χρειάζεται να είναι σε αύξουσα σειρά. Μπορούν να είναι σε οποιαδήποτε σειρά.

for i in 3 43 44 11 9; do echo $i; done


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

για βρόχους που χρησιμοποιούν λίστες λέξεων

Το ίδιο εύκολα μπορούμε να κάνουμε και με τις λέξεις. Αντιγράψτε το κείμενο του σεναρίου σε ένα πρόγραμμα επεξ

ς και αποθηκεύστε το ως “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


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

Ας τρέξουμε το σενάριο.

./word-list.sh


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

Ακριβώς όπως έγινε με τους αριθμούς, ο επαναλήπτης — σε αυτό το παράδειγμα, η μεταβλητή

word

—Διασχίζει τη λίστα των στοιχείων δεδομένων μέχρι να φτάσει στο τέλος της λίστας. Το σώμα του βρόχου έχει πρόσβαση στην τιμή στο

word

μεταβλητή και έτσι κάθε λέξη στη λίστα υποβάλλεται σε επεξεργασία.

για βρόχους με εύρη αριθμών

Αν ήθελες α

for

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

Αυτό το σενάριο είναι “number-range.sh.”

 #!/bin/bash
for i in {1..10}
do
 echo "Loop spin:" $i
done

Το εύρος αριθμών ορίζεται μέσα σε αγκύλες “

{}

«με δύο περιόδους»

..

” Διαχωρίζοντας τους αριθμούς που ξεκινούν και τελειώνουν το εύρος. Βεβαιωθείτε ότι δεν έχετε συμπεριλάβει κανένα κενό διάστημα στον ορισμό του εύρους.

Έτσι τρέχει:

./number-range.sh


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

Μπορείτε να συμπεριλάβετε έναν άλλο αριθμό που καθορίζει το μέγεθος βήματος που πρέπει να χρησιμοποιήσει ο επαναλήπτης για να περιηγηθεί στους αριθμούς στο εύρος. Αυτό το σενάριο, “number-range2.sh” θα χρησιμοποιεί εύρος από 0 έως 32 και μέγεθος βήματος 4.

 #!/bin/bash
for i in {0..32..4}
do
 echo "Loop spin:" $i
done

Ο επαναλήπτης διασχίζει το εύρος αριθμών σε άλματα των τεσσάρων.

./number-range2.sh


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

για βρόχους που χρησιμοποιούν ονόματα αρχείων

Επειδή μπορούμε να επεξεργαστούμε λίστες λέξεων, μπορούμε να κάνουμε τα σενάρια μας να λειτουργούν με ονόματα αρχείων. Αυτό το σενάριο ονομάζεται “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


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

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

Αυτό το σενάριο ονομάζεται “filenames2.sh.” Αντικαταστήσαμε τη λίστα ονομάτων αρχείων με το μοτίβο ονομάτων αρχείου “*.sh” για να έχουμε την αναφορά σεναρίου σε όλα τα αρχεία σεναρίων στον τρέχοντα κατάλογο.

 #!/bin/bash
for file in *.sh
do
 ls -lh "$file"
done

Εδώ είναι η έξοδος.

./filenames2.sh


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

για βρόχους με χρήση παραμέτρων γραμμής εντολών

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

$*

Η μεταβλητή αντιπροσωπεύει όλες τις παραμέτρους της γραμμής εντολών που μεταβιβάζονται στο σενάριο.

Αυτό είναι το “filenames3.sh.”

 #!/bin/bash
for file in $*
do
 ls -lh "$file"
done

Θα ζητήσουμε ονόματα αρχείων που ξεκινούν με “n” και έχουν επέκταση SH.

./filenames3.sh n*.sh


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

Μπορούμε επίσης να περάσουμε σε περισσότερα από ένα μοτίβα τη φορά.

./filenames3.sh n*.sh .bashrc


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

Η μεταβλητή 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


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

Το 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


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

Infinite for Loops

Μπορείτε επίσης να χρησιμοποιήσετε αυτήν τη μορφή

for

βρόχο για να δημιουργήσετε έναν άπειρο βρόχο. Το μόνο που χρειάζεται να κάνετε είναι να αφαιρέσετε όλα τα στοιχεία από την κεφαλίδα του βρόχου, όπως αυτό. Αυτό είναι “άπειρο.sh.”

 #!/bin/bash
for (( ; ; ))
do
 echo "Press Ctrl+C to stop..."
  1
done

Θα χρειαστεί να πατήσετε Ctrl+C για να σταματήσετε τον βρόχο.

./infinite.sh


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

για βρόχους που χρησιμοποιούν πίνακες λέξεων

Μπορούμε εύκολα να επαναλάβουμε μέσα από μια σειρά λέξεων. Πρέπει να δώσουμε το όνομα του πίνακα στην κεφαλίδα του βρόχου και ο επαναλήπτης θα περπατήσει σε όλες τις εγγραφές στον πίνακα. Αυτό είναι “word-array.sh.”

 #!/bin/bash
distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")
for distro in $distributions
do
 echo $distro
done

Όλες οι διανομές παρατίθενται για εμάς.

./word-array.sh


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

Η εντολή συνέχειας

Εάν θέλετε ο βρόχος να υπερβαίνει μια συγκεκριμένη καταχώρηση, ελέγξτε εάν ο επαναλήπτης ταιριάζει με αυτήν την καταχώρηση και χρησιμοποιήστε το

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


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

Η εντολή διακοπής

ο

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


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

για βρόχους που χρησιμοποιούν συσχετιστικούς πίνακες

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

Μπορούμε να επαναλάβουμε μέσω ενός συσχετιστικού πίνακα χρησιμοποιώντας a

for

βρόχος. Αυτό το σενάριο είναι “associative.sh.” Ορίζει έναν συσχετιστικό πίνακα με τέσσερις εγγραφές, μία για καθεμία από τα “dog”, “cat”, “robin” και “human”. Αυτά είναι τα κλειδιά. Οι τιμές είναι ο (προεπιλεγμένος) αριθμός των σκελών που έχει το καθένα.

 #!/bin/bash

declare -A =( [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


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

Επανάληψη κατά την έξοδο των εντολών

Εάν έχετε μια εντολή ή μια ακολουθία εντολών που παράγουν μια λίστα με κάτι, όπως ονόματα αρχείων, μπορείτε να τις επαναλάβετε με ένα

for

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

Αυτό το σενάριο είναι “command.sh.” χρησιμοποιεί

ls

και

wc

για να παρέχει μια ταξινομημένη λίστα ονομάτων αρχείων σεναρίων, μαζί με τον αριθμό των γραμμών, των λέξεων και των byte.

 #!/bin/bashfor i in $(ls *.sh | sort);do echo $(wc $i)done 

Όταν το τρέχουμε, παίρνουμε τα στατιστικά στοιχεία για κάθε αρχείο, με τα αρχεία να παρατίθενται με αλφαβητική σειρά.

./command.sh


, 9 Παραδείγματα για βρόχους σε σενάρια Linux Bash, TechWar.gr

The Dazzling for Loop

ο

for

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

for

Ο βρόχος είναι το μόνο που θα χρειαστείτε.


Σχετικό: Πώς να επεξεργαστείτε ένα αρχείο γραμμή προς γραμμή σε ένα σενάριο Linux Bash

ο

while

Ο βρόχος, για παράδειγμα, είναι πολύ καλύτερος για ορισμένα πράγματα από το

for

βρόχο, όπως η ανάγνωση γραμμών από ένα αρχείο.

Η σύνταξη καλών σεναρίων σημαίνει τη χρήση του καταλληλότερου εργαλείου για την εργασία. ο

for

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


VIA:

HowToGeek.com


Leave A Reply



Cancel Reply

Your email address will not be published.