Shell Scripting – Μέρος 5ο – Cases


Στο προηγούμενα άρθρα μάθαμε πως να φτιάχνουμε ένα bash script με μεταβλητές, να εκτελεί εντολές μέσα σε βρόχους, να ελέγχουμε τη ροή του και πως να κάνουμε μαθηματικές πράξεις μέσα από το bash. Στο παρόν μάθημα θα δούμε πως θα κάνουμε χρήση των cases.

Cases

Τα cases μας επιτρέπουν να ελέγχουμε τα ορίσματα που θα ελέγξουν τη ροή του προγράμματος μας, χωρίς τη χρήση if then else αλλά και επιπλέον πόσο εύκολα μπορούμε να δημιουργήσουμε menus επιλογών.

#!/bin/bash
printf 'Which Linux distribution do you know? '
read DISTR

case $DISTR in
ubuntu)
echo "I know it! It is an operating system based on Debian."
;;
centos|rhel)
echo "Hey! It is my favorite Server OS!"
;;
windows)
echo "Very funny..."
;; 
*)
echo "Hmm, seems i've never used it."
;;
esac

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

Όμως αν γραφεί ένα script με cases στην ακόλουθη μορφή;

case "$1" in
start)
echo start
;;

stop)
echo stop
;;

status)
echo status 
;;
restart)
echo stop
echo start
;;

*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1

esac

Τότε πως εισάγεται το όρισμα για να επιστρέψει την αντίστοιχη επιλογή;

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

Με απλά λόγια αντί να έχουμε if-then-else σε κάθε γραμμή και να συγκρίνουμε το όρισμα μας με αυτό της συνθήκης, με το case ταυτίζουμε το όρισμα μας με το αντίστοιχο case.

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

#!/bin/bash

PS3='Μπορείτε να διαλέξετε μια από τις επιλογές : '
options=("Επιλογή 1" "Επιλογή 2" "Επιλογή 3" "Έξοδος")
select opt in "${options[@]}"
do
case $opt in
"Επιλογή 1")
echo "Παίχτε Πανκ"
;;
"Επιλογή 2")
echo "Τρία πουλάκια κάθονται..."
;;
"Επιλογή 3")
echo "Πόσιμπολ"
;;
"Έξοδος")
echo "Έξοδος..."
exit 0
;;
*)
echo "Ξανά..."
esac
done

Το PS3 μας ενημερώνει με το μήνυμα επιλογής που εμφανίζεται στην αρχή του script. Χωρίς αυτό πολύ απλά θα έχουμε εμφάνιση μόνο των επιλογών.

Ωστόσο αρκετές φορές είναι χρήσιμη η δημιουργία scripts που αρκούνται σε μια απάντηση [ναι/όχι]. Σε αυτές τις περιπτώσεις χρησιμοποιούμε μια μορφή script σαν αυτή που φαίνεται στη συνέχεια

#!/bin/bash

echo -n "Το Linux είναι ο καλύτερος πυρήνας ever [yes/no]: "
read yno
case $yno in

[yY] | [yY][Ee][Ss] )
echo "Μπορεί να τρέξει σε οποιαδήποτε συσκευή"
;;

[nN] | [nN][Oo] )
echo "Είναι μονολιθικός";
exit 1
;;
*) echo "Λανθασμένη επιλογή"
;;
esac

Σε αυτή την περίπτωση βλέπουμε ότι μπορούμε να δεχτούμε 2 μορφές απαντήσεων σε κάθε περίπτωση. Δηλαδή στην περίπτωση θετικής απάντησης μπορούμε να απαντήσουμε με Υ ή με YES. Το ενδιαφέρον των αγκυλών όμως είναι ότι οι απαντήσεις αυτές μπορούν να δοθούν είτε με μεγάλα, είτε με μικρά γράμματα και σε όποιο συνδυασμό εμείς επιθυμούμε.

Με λίγα λόγια αποδεκτές μορφές είναι

Υ

όπως και

yEs

όπως επίσης και

ΥeS

και όποιος άλλος συνδυασμός αυτών.

Τι μάθαμε;

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

Σε επόμενο άρθρο θα δούμε πως θα κάνουμε χρήση των συναρτήσεων ούτως ώστε να κάνουμε έξυπνη επαναχρησιμοποίηση του κώδικα μας.

Όπως πάντα τον κώδικα του σημερινού αλλά και των προηγούμενων άρθρων θα τον βρείτε στο github του Cerebrux στην κατηγορία Bash-Lessons. Όλα τα νέα αλλά και παλιότερα μαθήματα θα τα βρείτε στο λήμμα «μαθήματα shell scripting«

Advertisements

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

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

Λογότυπο WordPress.com

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

Φωτογραφία Google

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό 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

ΠΑΝΩ ↑