Ένα βασικό error handling σε bash script

Καλησπέρα, φτιάχνω την νέα έκδοση του disc-o-brain και θέλω ένα παράδειγμα από error handling σε bash script. Ευχαριστώ!

Ένα απλό παράδειγμα θα δεις στο ακόλουθο άρθρο

Και ένας απλός κώδικας

#!/bin/bash
 
# Έλεγχος ροής και control operators
 
read -rp "Δώσε έναν αριθμό : " number
 
if [[ $number -eq 0 ]];
then
echo "Έδωσες τον αριθμό 0"
else
if [[ $number -gt 10 ]];
then
echo "Έδωσες το $number που είναι μεγαλύτερο του 10"
elif [[ $number -eq 10 ]];
then
echo "Έδωσες το 10"
else
echo "Έδωσες το $number που είναι μικρότερο του 10"
fi
fi

Επίσης δες και αυτό το άρθρο

@billniakas Και αν καποιος δωσει γραμμα ? συμβολο ? και οχι αριθμο ?
Αν δωσει δεκαδικο ? Αν δωσει αριθμο με γραμματα μαζι ? Αν δωσει οτιδηποτε που εχει και κενα αναμεσα τους ?
Σιγουρα ολα αυτα εχουν να κανουν με το τι περιμενει/απαιτει/θελει ο κατασκευαστης να “δωσει” ο χρηστης σε καποιο συγκεκριμενο “input” και αν δωσει κατι ακυρο να μην σκασει το προγραμμα σε ανεξελεγκτο error…
Το παραδειγμα σου αν και σωστο δεν ειναι “error handling”. Δεν εχω ιδεα απο bash scripting οποτε δεν ξερω πως να υλοποιησω αυτα που ρωταω :slight_smile:
Πολυ πιθανο αν παραθεσει καποιος τις πιθανες επιλογες αριθμημενες να μπορει να ελεγξει πιο ευκολα το input , απο το να αφησει τον χρηστη να εισαγει ο,τι ναναι , οπως ναναι.

Ναι έχεις δίκιο αλλά εκτιμώ ότι πρέπει ο @Άγγελος_Καραπατάκης να μάθει σε πρώτη φάση τα βασικά και μετά να πάει σε μια υλοποίηση που θα έχει και error handling.

1 Like

Στον κώδικα αυτόν δείχνει το παρακάτω σφάλμα:
IMG_20201113_190950

Διάβασε το λάθος που σου βγάζει, μήπως δεν έγραψες σωστά τον κώδικα; Επίσης μη βάζεις εικόνα αλλά output κώδικα με τη χρήση code tags.

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

Κάθε πρόγραμμα με τον τερματισμό του επιστρέφει το λεγόμενο exit code που κατά σύμβαση είναι ίσο με το 0 αν όλα πήγαν καλά. Τι τιμή παίρνει αν πάει κάτι στραβά θα το βρεις στο man page της κάθε εντολής. Η τιμή αυτή είναι διαθέσιμη στο κέλυφος μέσα απο την μεταβλητή $? και είναι σημαντικό είτε να την να την αποθηκεύσεις, είτε να κάνεις αμέσως τον έλεγχο.

Το τι λέμε όμως error handling είναι ένα τεράστιο κεφάλαιο και δεν μπορεί να εξαντληθεί σε μια απάντηση στο φόρουμ. Ένα αξιόπιστο πρόγραμμα το κάνει σε πολλά επίπεδα απο το επίπεδο της σχεδίασης και της αρχιτεκτονικής του, τον έλεγχο των εισόδων του, μέχρι το χαμηλό επίπεδο των επιμέρους εντολών.

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

Να φτιάξεις κάποιο πρωτότυπο που να λειτουργεί για σένα που το έφτιαξες είναι σχετικά εύκολο και το Bash είναι το ιδανικό εργαλείο για να φτιάξεις μικρά προγραμματάκια για προσωπική χρήση. Αλλά για να γίνει αυτό “προ̈́ιον” που να τρέχει και στο δικό μου μηχάνημα απαιτεί πολλαπλάσια δουλεία. Η παρατήρηση αυτή είναι ένας από τους βασικούς νόμους των υπολογιστών.

Άγγελε το μήνυμα που σου βγάζει είναι αναμενόμενο γιατί ο κώδικας του παραδείγματος είναι ημιτελής.
Για κάθε if statement εμφολευμένο ή όχι χρειάζεται και αντίστοιχα το τερμάτικό statement fi.

Στο παραπάνω παράδειγμα είναι 2 τα if statements αλλά μόνο ένα fi για τον τερματισμό τους. Χρειάζεται άλλο ένα τερματικό fi.

Όσο αφορά τον error handling, θα συμφώνήσω με τον Asfodelus ότι είναι μεγάλο κεφάλαιο και θέλει πολύ δουλειά σε ότι προτζεκτ και να κάνεις, μικρό ή μεγάλο.

1 Like

Σωστό, λάθος μου, διορθώθηκε.