10 Παραδείγματα βρόχου Bash For με επεξηγήσεις

Το For Loop είναι αναπόσπαστο μέρος οποιασδήποτε γλώσσας προγραμματισμού. Επιτρέπει στα προγράμματα να επαναλαμβάνονται μέσω ενός συγκεκριμένου αριθμού στοιχείων.

Για παράδειγμα, εάν θέλετε να περάσετε από μια λίστα ή μια σειρά από στοιχεία ‘n’, θα χρησιμοποιήσετε ένα βρόχο for. Ας πάρουμε ένα απλό παράδειγμα:

Πίνακας 1Violet2Indigo3Blue4GreenRainbow

Για να εκτελέσουμε οποιεσδήποτε ενέργειες ή να επαναλάβουμε τα στοιχεία στον παραπάνω πίνακα, χρειαζόμαστε έναν βρόχο For.

Bash For Loop

Σε ένα σενάριο bash, η σύνταξη For Loop είναι η εξής:

#!/bin/bash

for VAR in 1 2 3 4 5.....N

do

 ACTION 1

 ACTION 2

 .....

done

Το Bash For Loop είναι αρκετά απλό. Η πρώτη γραμμή #!/bin/bash υποδεικνύει ότι ο κώδικας είναι σενάριο bash. Το VAR σημαίνει την προσωρινή μεταβλητή που χρησιμοποιείται για βρόχο. Το N υποδεικνύει τον μέγιστο αριθμό επαναλήψεων. Το ‘do’ και το ‘done’ ξεκινούν και σταματούν το Loop, αντίστοιχα. Οι ενέργειες είναι οι εντολές που εκτελούνται εντός του βρόχου.

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

Μπορείτε να εκτελέσετε απευθείας αυτά τα προγράμματα στη γραμμή εντολών bash ή να τα αποθηκεύσετε σε ένα αρχείο και να εκτελέσετε το αρχείο χρησιμοποιώντας την εντολή Bash filename.sh.

Ανάγνωση στατικής λίστας

Σκεφτείτε την ακόλουθη λίστα – rainbowColorList = Βιολετί, Indigo, Μπλε, Πράσινο, Κίτρινο, Πορτοκαλί, Κόκκινο

Μπορούμε να εκτυπώσουμε την παραπάνω λίστα συμβολοσειρών χρησιμοποιώντας το Bash For Loop ως εξής:

#! /bin/sh

# Define the list

rainbowColorList=Violet,Indigo,Blue,Green,Yellow,Orange,Red

# Comma separator pattern using //,/

for colors in ${rainbowColorList//,/ }

do

   echo $colors

done

Η έξοδος θα είναι η λίστα των στοιχείων σε μια νέα γραμμή.

#Output

Violet
Indigo
Blue
Green
Yellow
Orange
Red

Διαβάζοντας έναν πίνακα

Η σύνταξη για τη δήλωση ενός πίνακα είναι διαφορετική. Χρησιμοποιήστε παρενθέσεις για κάθε στοιχείο (String).

rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red")

for colors in "${rainbowArray[@]}"; do

     echo "I like $colors"

done

Το ‘@’ χρησιμοποιείται για επανάληψη σε κάθε στοιχείο του πίνακα.

#Output

I like Violet
I like Indigo
I like Blue
I like Green
I like Yellow
I like Orange
I like Red

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

#Printing with index

rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red")

for i in "${!rainbowArray[@]}";

do

  echo "Color at index " $i " : " "${rainbowArray[$i]}"

  i=$((i+1));

done
#Output

Color at index 0 : Violet
Color at index 1 : Indigo
Color at index 2 : Blue
Color at index 3 : Green
Color at index 4 : Yellow
Color at index 5 : Orange
Color at index 6 : Red

Σημειώστε ότι χρησιμοποιούμε το ‘!’ στον βρόχο για να λάβετε το ευρετήριο στοιχείου.

  Αποκτήστε προσαρμοσμένα πρότυπα που θα εμφανίζονται στην οθόνη έναρξης στο MS Office 2013

Επαναλαμβανόμενο εύρος αριθμών

Μπορούμε να χρησιμοποιήσουμε το Bash For Loop για επανάληψη σε ένα εύρος αριθμών.

#iterating over range of numbers

echo "Countdown begins..."

for N in {10..0}

do

    echo "$N"

done

Το «..» υποδεικνύει μια σειρά αριθμών.

#Output

10
9
8
7
6
5
4
3
2
1
0

Μπορούμε επίσης να παραλείψουμε αριθμούς μέτρησης καθορίζοντας το εύρος.

Στο παρακάτω παράδειγμα, παραλείπουμε την καταμέτρηση κατά 3.

#iterating with skip counting

echo "Countdown begins..."

for N in {30..0..3}

do

    echo "$N"

done

Το παραπάνω πρόγραμμα ξεκινά με το 30 ως τον πρώτο αριθμό και μετρά αντίστροφα μέχρι το 0. Η τελευταία παράμετρος στον βρόχο for ‘3’ καθορίζει τον αριθμό μέτρησης παράλειψης.

#Output

30
27
24
21
18
15
12
9
6
3
0

Χορδές και χαρακτήρες

Μπορούμε να κάνουμε πολλές ενδιαφέρουσες λειτουργίες συμβολοσειρών με το Bash For Loop.

Για παράδειγμα, μπορούμε να διαβάσουμε κάθε χαρακτήρα μιας συμβολοσειράς χρησιμοποιώντας τον τελεστή ‘seq’ σε έναν βρόχο For:

#read characters of a string

myword="welcome"

for i in $(seq 1 ${#myword})

do

 echo "${myword:i-1:1}"

done

Σημειώστε ότι το ‘seq’ πρέπει να ξεκινά με 1 για να λάβετε πρώτα τον πρώτο χαρακτήρα.

#Output

W
e
l
c
o
m
e

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

#read each word from a sentence

mysentence="Welcome to grtechpc.org. One stop hub for all techies"

for word in $mysentence; do

    echo $word

done
#Output

Welcome 
to 
grtechpc.org. 
One 
stop 
hub 
for 
all 
techies

Εκφράσεις

Παρόμοια με οποιαδήποτε άλλη γλώσσα προγραμματισμού όπως η Java, μπορούμε να τοποθετήσουμε εκφράσεις μέσα σε ένα Bash For Loop.

for (( var=10; var>=0; var-- ))

do 

  echo "Counting down...$var"

done
#Output

Counting down...10
Counting down...9
Counting down...8
Counting down...7
Counting down...6
Counting down...5
Counting down...4
Counting down...3
Counting down...2
Counting down...1
Counting down...0

Ανάγνωση επιχειρημάτων γραμμής εντολών

Για να διαβάσουμε από ορίσματα γραμμής εντολών, χρησιμοποιούμε την εντολή «ανάγνωση». Στο παρακάτω παράδειγμα, θα λάβουμε μερικούς αριθμούς από τον χρήστη και θα εκτυπώσουμε το άθροισμα χρησιμοποιώντας το Bash For Loop. Χρησιμοποιούμε τη μεταβλητή σύνολο για να αποθηκεύσουμε το ενδιάμεσο και τελικό σύνολο ή το άθροισμα των αριθμών.

read -a array -p "Enter the numbers you want to add:"

total=0

for i in ${array[@]}; do

  let total+=$i

done

echo "Sum of the numbers is: $total"

Η έξοδος είναι:

#Output

Enter the numbers you want to add: 3 4 66
Sum of the numbers is: 73

Εύρεση περιττών-ζυγών αριθμών

Για να βρούμε μονούς και ζυγούς αριθμούς μεταξύ 1 και 10 (ή οποιονδήποτε αριθμό N), θα πρέπει να χρησιμοποιήσουμε τη συνθήκη if μαζί με το Bash για βρόχο. Για να προσδιορίσουμε έναν άρτιο αριθμό, θα διαιρέσουμε τον αριθμό με το 2 και αν το υπόλοιπο είναι 0, τότε θα τον κατηγοριοποιήσουμε ως άρτιο άλλο περιττό.

#declare the list where the even and odd numbers will be sorted and kept

evennum=""

oddnum=""

for (( i=1; i<=10; i++ ))

do

remainder=$(( $i % 2 ))

if [ $remainder -eq 0 ]; then

 evennum="$evennum $i "

else

 oddnum="$oddnum $i "

fi

done

echo "Even numbers are: "$evennum

echo "Odd numbers are: "$oddnum

Σημειώστε ότι δίνουμε το εύρος ως 10 στο παραπάνω παράδειγμα. Μπορούμε να αλλάξουμε αυτόν τον αριθμό για να λάβουμε άρτιους και περιττούς αριθμούς μεταξύ οποιασδήποτε περιοχής. Μπορείτε επίσης να δοκιμάσετε να διαβάσετε τον αριθμό από τον χρήστη χρησιμοποιώντας την εντολή «ανάγνωση» που μάθαμε στην προηγούμενη ενότητα.

#Output

Even numbers are: 2 4 6 8 10
Odd numbers are: 1 3 5 7 9

Άπειρος βρόχος

Το Infinity ή Infinite Loop είναι ένας βρόχος που δεν σταματά να εκτελείται και το πρόγραμμα πρέπει να αναγκαστεί να σταματήσει να χρησιμοποιεί Ctrl+C. Μπορούμε εύκολα να δημιουργήσουμε έναν άπειρο βρόχο χρησιμοποιώντας το ‘; ;’ τελεστής μέσα στο βρόχο for:

for (( ; ; ))

do

  echo "Welcome to grtechpc.org"

done
#Output

Welcome to grtechpc.org
Welcome to grtechpc.org
Welcome to grtechpc.org
Welcome to grtechpc.org
Welcome to grtechpc.org
Welcome to grtechpc.org
Welcome to grtechpc.org
Welcome to grtechpc.org
Welcome to grtechpc.org
Welcome to grtechpc.org
^C
$

Δήλωση διακοπής

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

for color in Violet Indigo Blue Green Yellow Orange Red

do

  if [[ "$color" == 'Green' ]]; then

    break

  fi

  echo "Searching for Green, the color now is $color"

done

echo "I found my color $color"

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

#Output

Searching for Green, the color now is Violet
Searching for Green, the color now is Indigo
Searching for Green, the color now is Blue
I found my color Green

Συνέχεια δήλωσης

Το Continue χρησιμοποιείται για να παραλείψετε τον τρέχοντα βρόχο και να μετακινηθείτε στον επόμενο με βάση μια συγκεκριμένη συνθήκη. Για παράδειγμα, εάν δεν θέλετε να εκτυπώσετε το χρώμα «Πράσινο» από το προηγούμενο πρόγραμμά μας, μπορούμε να βάλουμε συνέχεια και θα εμφανιστούν όλα τα άλλα χρώματα εκτός από το Πράσινο.

for color in Violet Indigo Blue Green Yellow Orange Red

do

  if [[ "$color" == 'Green' ]]; then

    continue

  fi

  echo "$color"

done
#Output

Violet
Indigo
Blue
Yellow
Orange
Red

Τελικές Λέξεις

Καλύψαμε τις πιο συνηθισμένες χρήσεις ενός βρόχου Bash For, χρησιμοποιώντας συμβολοσειρές, ακέραιους αριθμούς, πίνακες και λίστα. Εάν μαθαίνετε Linux αλλά έχετε μηχανή Windows 10, μπορείτε να χρησιμοποιήσετε τη δυνατότητα WSL και να εγκαταστήσετε το Linux στον υπολογιστή σας με Windows.

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

Στη συνέχεια, μπορείτε να χρησιμοποιήσετε το τερματικό Linux με παρόμοιο τρόπο με το CMD.

Στη συνέχεια, μπορείτε να ελέγξετε πώς να εκτελέσετε σενάρια bash χρησιμοποιώντας Python;