Shell Scripting – Μέρος 3ο – Βρόχοι (while – until – for)


Στο προηγούμενο άρθρο είδαμε πως ελέγχουμε τη ροή του προγράμματος μας, με τη χρήση των  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«

 

Advertisements

4 σκέψεις σχετικά με το “Shell Scripting – Μέρος 3ο – Βρόχοι (while – until – for)

Add yours

  1. Ωραία λέω μέρος τρίτο έσκασε στο μέηλ, διαβάζω “Βρόγχοι” με πιάνει μια αναγούλα :’~~
    Πέρα τη πλάκα, καταλαβαίνω ότι είναι η σωστή απόλυτη μετάφραση, απλά μου φαίνεται κάπως!

Σου άρεσε το άρθρο; Πες την άποψή σου... έστω και Ανώνυμα:

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση /  Αλλαγή )

Google photo

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google. Αποσύνδεση /  Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση /  Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση /  Αλλαγή )

Σύνδεση με %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Create a website or blog at WordPress.com

ΠΑΝΩ ↑