Στο προηγούμενο άρθρο είδαμε πως ελέγχουμε τη ροή του προγράμματος μας, με τη χρήση των if/then/else και ως εκ τούτου να ορίσουμε πως θα συμπεριφερθεί στη συνέχεια. Στο παρόν άρθρο θα δούμε πως μπορούμε με τη χρήση των βρόχων (while – until – for) να εξελίξουμε τα προγράμματα μας και να τους δώσουμε μια πιο δομημένη μορφή
Δομή επαναληπτικού βρόχου
while [ συνθήκη ] do αυτό που θέλουμε να κάνει done
Στην ουσία έχουμε εκτέλεση των εντολών μετά το do μέχρι την μη ικανοποίηση της συνθήκης. Με λίγα λόγια ο επαναληπτικός βρόγχος εκτελείται μέχρι να μην ισχύει η συνθήκη.
Τύποι βρόχων
While loops
Ας δούμε τον κώδικα του προγράμματος number
#!/bin/bash # Βρόγχος While number="0" # Αρχικοποίηση της μεταβλητής για την οποία θα υλοποιήσουμε τη συνθήκη while [ $number != 5 ] # Όσο η μεταβλητή δεν παίρνει την τιμή 5 ο βρόχος θα εκτελείται do read -rp "Give a number : " number # Λαμβάνουμε μια τιμή από το χρήστη echo $number # και την τυπώνουμε done exit 0
Στην εκδοχή του κώδικα αυτού, το πρόγραμμα ζητά από το χρήστη έναν αριθμό. Όσο αυτός ο αριθμός δεν είναι 5, τότε έχουμε επανάληψη του βρόχου. Μόλις η μεταβλητή number πάρει την τιμή 5, ο βρόχος τερματίζεται.
Το while μπορεί να γραφεί διαφορετικά και να παράξει πάλι το ίδιο αποτέλεσμα και μάλιστα με πιο απλό τρόπο, όπως φαίνεται στον κώδικα που ακολουθεί.
#!/bin/bash # Υλοποίηση βρόγχου While - εναλλακτική προσέγγιση while true do read -rp "Δώσε έναν αριθμό : " number if [ $number -eq 5 ]; then echo "O αριθμός $number τερματίζει το βρόχο" break else echo "Έδωσες τον αριθμό $number" fi done exit 0
Ο οποίος κώδικας λειτουργεί ακριβώς με τη λογική που λειτουργεί και ο πρώτος.
Η συνθήκη που είχαμε στην αρχή του while τώρα τη μεταθέσαμε μέσα στο βρόχο και όπως είδαμε ο τερματισμός του βρόχου γίνεται με την εντολή break. Με λίγα λόγια αν η συνθήκη που ορίσαμε ως καθοριστική για τον τερματισμό του βρόχου, ικανοποιηθεί άλλα ΔΕΝ εισάγουμε το break ο βρόχος θα συνεχίσει να εκτελείται.
For Loops
Άλλη μορφή επαναληπτικού βρόχου είναι τα for loops
#!/bin/bash for i in `seq 1 10`; do echo $i done
Ο κώδικας αυτός θα πάρει τους αριθμούς από το 1 μέχρι το 10 και θα τους εκτυπώσει στην οθόνη.
Μπορεί όμως να μην εκτυπώνει και αριθμούς αλλά να εκτυπώνει τα περιεχόμενα ενός φακέλου.
#!/bin/bash for i in $( ls ); do echo $i done
Aν στο πρώτο παράδειγμα του for θέλουμε να αναστρέψουμε την σειρά; Δηλαδή από το 10 στο 1; Στην περίπτωση αυτή χρήσιμο είναι το until loop
Until Loops
Τα until loops είναι αρκετά χρήσιμα όταν έχουμε μετρητές στο πρόγραμμα μας. Δηλαδή θέλουμε τερματισμό μιας διεργασίας όταν η τιμή του μετρητή/μεταβλητής φτάσει αυτή που έχουμε ορίσει
#!/bin/bash COUNTER=10 until [ $COUNTER -lt 1 ]; do echo COUNTER $COUNTER COUNTER=$(( $COUNTER - 1 )) done
Στον κώδικα μας έχουμε μια μεταβλητή COUNTER που έχει την τιμή 10, και αυτή την μειώνουμε μέχρις ότου να φτάσει την τιμή 1. Τότε ο βρόχος τερματίζεται.
Τι μάθαμε;
Στα προηγούμενα άρθρα μιλήσαμε για τις μεταβλητές, πως ορίζουμε μια μεταβλητή, πως ελέγχουμε τη ροή ενός προγράμματος μεσώ των if then else και τώρα πήγαμε λίγο παρακάτω, μαθαίνοντας τη χρήση των βρόχων for while και until. Σε επόμενο άρθρο θα πάμε παρακάτω μαθαίνοντας για τις μαθηματικές εκφράσεις που μπορούμε να κάνουμε στο bash και πως αυτές μπορούν να μας διευκολύνουν στον προγραμματισμό του κελύφους μας.
Όπως πάντα ο κώδικας του σημερινού αλλά και των παλαιότερων άρθρων, θα τον βρείτε στο github του Cerebrux.
Όλα τα νέα αλλά και παλιότερα μαθήματα θα τα βρείτε στο λήμμα «μαθήματα shell scripting«
Ωραία λέω μέρος τρίτο έσκασε στο μέηλ, διαβάζω “Βρόγχοι” με πιάνει μια αναγούλα :’~~
Πέρα τη πλάκα, καταλαβαίνω ότι είναι η σωστή απόλυτη μετάφραση, απλά μου φαίνεται κάπως!
Άλλο ο «βρόγχος» (του πνεύμονα) και άλλο ο «βρόχος» (επανάληψης) :-)
Εξαιρετική σειρά άρθρων παρ’όλα αυτά! Εύγε!
Έχεις δίκιο, διορθώθηκε :)
Εμένα πάλι περίεργο μου ακούγεται, i stand with what i said! :P