Προγραμματισμός κελύφους
Δημοσιεύτηκε: 28 Οκτ 2008, 13:04
Προγραμματισμός κελύφους (bash)
To bash είναι ένα κέλυφος, όπως το csh, tcsh, zsh, ksh και άλλα. Είναι το προεπιλεγμένο κέλυφος για το ubuntu. To κέλυφος παρέχει ένα τρόπο επικοινωνίας του χρήστη με το λειτουργικό, είτε ενεργά (interactively) ή παθητικά (non-interactively). Ενεργά σημαίνει ότι οι εντολές εισάγονται από το πληκτρολόγιο από το χρήστη ενώ παθητικά εννοούμε ότι οι εντολές εκτελούνται από ένα αρχείο.
Αν μια εντολή ξεκινάει με # τότε θεωρείται από το bash ως σχόλιο και αγνοείται. Οι εντολές μπορούν να χωριστούν χονδρικά σε τεσσερις κατηγορίες:
Οι απλές εντολές είναι ακολουθία λέξεων και κενών, όπως
Oι αγωγοί | διοχετεύουν το αποτέλεσμα της πρώτης εντολής στη δεύτερη
Οι λίστες είναι ακολουθία εντολών που εκτελούνται η μία μετά την άλλη
Οι σύνθετες εντολές περιλαμβάνουν βρόγχους και εντολές ελέγχου.
Το κέλυφος μπορεί να χρησιμοποιηθεί σαν μια αυτόνομη γλώσσα προγραμματισμού μιας και περιέχει όλα τα χαρακτηριστικά όπως πρόσθεση, πολλαπλασιασμός, βρόγχους, στοιχεία ελέγχου κ.α. που απαιτεί μια γλώσσα προγραμματισμού. Η εκτέλεση ενός προγράμματος κελύφους, ας πούμε του αρχείου myscript, γίνεται ως εξής:
bash myscript
Για ευκολία μπορούμε να εισάγουμε ως πρώτη γραμμή του αρχείου myscript τη γραμμή:
και να αλλάξουμε τα δικαιώματα του αρχείου σε εκτελέσιμο
Tώρα μπορούμε να το εκτελέσουμε και ως
Στην περίπτωση αυτή το # δεν λειτουργεί ως σχόλιο, η μόνη εξαίρεση, αλλά σε συνδυασμό με τo ! δηλώνει ότι πρόκειται για πρόγραμμα κέλυφους bash.
To κλασσικό παράδειγμα "Hallo World" στους προγραμματιστές θα φαίνοταν στο bash:
που τυπώνει απλώς στην οθονη το "Hallo World".
Όπως στις περισσότερες γλώσσες προγραμματισμού υπάρχουν οι έννοιες τυπική έξοδος (stdout), τυπική είσοδος (stdin), τυπικό λάθος (stderr). Η τυπική έξοδος και το τυπικό λάθος είναι συνήθως η οθόνη, ενώ η τυπική είσοδος το πληκτρολόγιο. Μπορούμε όμως να αναδιοχετεύσουμε όλα αυτά.
Στα προγράμματα κελύφους είναι πολύ εύκολο να διαβάσουμε τα ορίσματα του προγράμματος με τις μεταβλητές $0, $1, $2, ..., οι οποίες δηλώνουν το όνομα του προγράμματος με$0 και επειτα το πρώτο, δεύτερο όρισμα κ.ο.κ. To παρακάτω πρόγραμμα τυπώνει στην οθόνη το όνομα του προγράμματος (του αρχείου) και το πρώτο όρισμα.
grep
Η εντολή grep είναι από τις πλέον ισχυρές εντολές στο linux. H χρήση της συνήθως συνδυάζεται με τους διαύλους (pipes). Σκοπός της είναι η αναζήτηση μιας ακολουθίας χαρακτήρων σε ένα κείμενο. Αλλά ας δούμε ένα παράδειγμα. To αποτέλεσμα της εντολής:
είναι όλες οι δειργασίες που εκτελουνται στον υπολογιστή μας από όλους τους χρήστες και όπως φαντάζεστε είναι αρκετά μακροσκελές. Εμείς όμως ψάχνουμε το id μιας συγκεκριμένης διεργασίας, η οποία ξέρουμε ότι περιέχει το συνδυασμό γραμμάτων qti. Για να αναζητήσουμε αυτή τη διεργασία διοχετεύουμε το αποτέλεσμα της εντολής ps aux με ένα δίαυλο στην εντολή grep:
η οποία μετά αναζητεί το συνδυασμό χαρακτήρων qti και επιστρέφει μόνο εκείνες τις γραμμές που περιεχουν αυτό το συνδυασμό. Φυσικά η χρήση διαύλων δε περιορίζεται μόνο σε έναν:
(Eίναι πολύ πιθανό η παραπάνω εντολές να μην επιστρέψουν τίποτε αν δεν υπάρχουν διεργασίες με τετοιους συνδυασμούς γραμμάτων στο όνομά τους.)
Η εργασία υπάγεται στην άδεια Creative Commons Αναφορά-Παρόμοια διανομή 3.0 Ελλάδα
To bash είναι ένα κέλυφος, όπως το csh, tcsh, zsh, ksh και άλλα. Είναι το προεπιλεγμένο κέλυφος για το ubuntu. To κέλυφος παρέχει ένα τρόπο επικοινωνίας του χρήστη με το λειτουργικό, είτε ενεργά (interactively) ή παθητικά (non-interactively). Ενεργά σημαίνει ότι οι εντολές εισάγονται από το πληκτρολόγιο από το χρήστη ενώ παθητικά εννοούμε ότι οι εντολές εκτελούνται από ένα αρχείο.
Αν μια εντολή ξεκινάει με # τότε θεωρείται από το bash ως σχόλιο και αγνοείται. Οι εντολές μπορούν να χωριστούν χονδρικά σε τεσσερις κατηγορίες:
- Απλές εντολές
- Αγωγοί (pipelines)
- Λίστες
- Σύνθετες εντολές
Οι απλές εντολές είναι ακολουθία λέξεων και κενών, όπως
- Κώδικας: Επιλογή όλων
cd ~/Documents
Oι αγωγοί | διοχετεύουν το αποτέλεσμα της πρώτης εντολής στη δεύτερη
- Κώδικας: Επιλογή όλων
ls | grep myfile
Οι λίστες είναι ακολουθία εντολών που εκτελούνται η μία μετά την άλλη
- Κώδικας: Επιλογή όλων
cd ~/Documents; ls; cd
Οι σύνθετες εντολές περιλαμβάνουν βρόγχους και εντολές ελέγχου.
Το κέλυφος μπορεί να χρησιμοποιηθεί σαν μια αυτόνομη γλώσσα προγραμματισμού μιας και περιέχει όλα τα χαρακτηριστικά όπως πρόσθεση, πολλαπλασιασμός, βρόγχους, στοιχεία ελέγχου κ.α. που απαιτεί μια γλώσσα προγραμματισμού. Η εκτέλεση ενός προγράμματος κελύφους, ας πούμε του αρχείου myscript, γίνεται ως εξής:
bash myscript
Για ευκολία μπορούμε να εισάγουμε ως πρώτη γραμμή του αρχείου myscript τη γραμμή:
- Κώδικας: Επιλογή όλων
#!/bin/bash
και να αλλάξουμε τα δικαιώματα του αρχείου σε εκτελέσιμο
- Κώδικας: Επιλογή όλων
chmod u+x myscript
Tώρα μπορούμε να το εκτελέσουμε και ως
- Κώδικας: Επιλογή όλων
./myscript
Στην περίπτωση αυτή το # δεν λειτουργεί ως σχόλιο, η μόνη εξαίρεση, αλλά σε συνδυασμό με τo ! δηλώνει ότι πρόκειται για πρόγραμμα κέλυφους bash.
To κλασσικό παράδειγμα "Hallo World" στους προγραμματιστές θα φαίνοταν στο bash:
- Κώδικας: Επιλογή όλων
#!/bin/bash
echo Hallo World
που τυπώνει απλώς στην οθονη το "Hallo World".
Όπως στις περισσότερες γλώσσες προγραμματισμού υπάρχουν οι έννοιες τυπική έξοδος (stdout), τυπική είσοδος (stdin), τυπικό λάθος (stderr). Η τυπική έξοδος και το τυπικό λάθος είναι συνήθως η οθόνη, ενώ η τυπική είσοδος το πληκτρολόγιο. Μπορούμε όμως να αναδιοχετεύσουμε όλα αυτά.
- stdout σε αρχείο
- Κώδικας: Επιλογή όλων
ls -l > result1.txt
Το αποτέλεσμα της εντολής ls-l αποθηκεύεται στο αρχείο result1.txt.- Κώδικας: Επιλογή όλων
ls -l >> result1.txt
Εδώ τo αποτέλεσμα της εντολής ls -l θα αποθηκευτεί στο αρχείο result1.txt. Αν υπάρχει το αρχείο τότε θα γραφεί στο τέλος του αρχείου χωρις να διαγράψει τα προηγούμενα. - stderr σε αρχείο
- Κώδικας: Επιλογή όλων
cd blah 2> err.txt
cd blah >& err.txt
Διοχετεύει το λάθος μήνυμα, σε περιπτωση που δεν υπάρχει ο φάκελος blah, στο αρχείο err.txt.
Στα προγράμματα κελύφους είναι πολύ εύκολο να διαβάσουμε τα ορίσματα του προγράμματος με τις μεταβλητές $0, $1, $2, ..., οι οποίες δηλώνουν το όνομα του προγράμματος με$0 και επειτα το πρώτο, δεύτερο όρισμα κ.ο.κ. To παρακάτω πρόγραμμα τυπώνει στην οθόνη το όνομα του προγράμματος (του αρχείου) και το πρώτο όρισμα.
- Κώδικας: Επιλογή όλων
#!/bin/bash
echo $0, $1
grep
Η εντολή grep είναι από τις πλέον ισχυρές εντολές στο linux. H χρήση της συνήθως συνδυάζεται με τους διαύλους (pipes). Σκοπός της είναι η αναζήτηση μιας ακολουθίας χαρακτήρων σε ένα κείμενο. Αλλά ας δούμε ένα παράδειγμα. To αποτέλεσμα της εντολής:
- Κώδικας: Επιλογή όλων
ps aux
είναι όλες οι δειργασίες που εκτελουνται στον υπολογιστή μας από όλους τους χρήστες και όπως φαντάζεστε είναι αρκετά μακροσκελές. Εμείς όμως ψάχνουμε το id μιας συγκεκριμένης διεργασίας, η οποία ξέρουμε ότι περιέχει το συνδυασμό γραμμάτων qti. Για να αναζητήσουμε αυτή τη διεργασία διοχετεύουμε το αποτέλεσμα της εντολής ps aux με ένα δίαυλο στην εντολή grep:
- Κώδικας: Επιλογή όλων
ps aux | grep qti
η οποία μετά αναζητεί το συνδυασμό χαρακτήρων qti και επιστρέφει μόνο εκείνες τις γραμμές που περιεχουν αυτό το συνδυασμό. Φυσικά η χρήση διαύλων δε περιορίζεται μόνο σε έναν:
- Κώδικας: Επιλογή όλων
ps aux | grep qti | grep wx
(Eίναι πολύ πιθανό η παραπάνω εντολές να μην επιστρέψουν τίποτε αν δεν υπάρχουν διεργασίες με τετοιους συνδυασμούς γραμμάτων στο όνομά τους.)
Η εργασία υπάγεται στην άδεια Creative Commons Αναφορά-Παρόμοια διανομή 3.0 Ελλάδα