Κέλυφος Bourne

Το **κέλυφος Bourne** (**Bourne shell** ή **sh**), ήταν το προεπιλεγμένο κέλυφος Unix στην Έκδοση 7 του Unix, και αντικατέστησε το κέλυφος Thompson, το εκτελέσιμο αρχείο του οποίου είχε το ίδιο όνομα, **sh**. Αναπτύχθηκε από τον Stephen Bourne, στα AT&T Bell Laboratories, και κυκλοφόρησε το 1977 με την Έκδοση 7 του Unix σε κολέγια και πανεπιστήμια. Παραμένει ένα δημοφιλές προκαθορισμένο κέλυφος λογαριασμών του Unix. Στα πιο πολλά συστήματα Unix το πρόγραμμα του κελύφους Bourne ή κάποιου συμβατού με αυτό βρίσκεται στη θέση `/bin/sh`, και εξακολουθεί να είναι το προκαθορισμένο κέλυφος του υπερχρήστη root σε πολλές τρέχουσες υλοποιήσεις του Unix. Ο διερμηνέας εντολών του περιείχε όλα τα χαρακτηριστικά που θεωρείται ότι παράγουν δομημένα προγράμματα. Αν και χρησιμοποιείται σαν διαδραστικός διερμηνέας εντολών, πάντα σκοπός του ήταν να είναι μια γλώσσα προγραμματισμού σεναρίων. Έγινε δημοφιλές με την δημοσίευση του "The UNIX Programming Environment" των Brian W. Kernighan και Rob Pike, το πρώτο βιβλίο που κυκλοφόρησε εμπορικά και εμφάνιζε το κέλυφος με εκπαιδευτικό τρόπο.

## Προέλευση
Το κέλυφος σχεδιάστηκε σαν αντικαταστάτης του αρχικού κελύφους Thompson.

Κάποιοι από τους βασικούς τους σκοπούς ήταν:
* Να μπορούν τα σενάρια κελύφους να χρησιμοποιούνται σαν φίλτρα.
* Να παρέχει προγραμματιστικές δυνατότητες όπως η ροή ελέγχου και οι μεταβλητές.
* Ο έλεγχος όλων των περιγραφέων αρχείων (file descriptors) εισόδου/εξόδου.
* Ο έλεγχος της διαχείρισης σημάτων μέσα στα σενάρια.
* Να μην υπάρχει όριο στο μέγεθος συμβολοσειρών στη διερμηνεία των σεναρίων κελύφους.
* Να απλοποιηθεί και να γενικευθεί ο μηχανισμός παράθεσης συμβολοσειρών (string quoting).
* Ο μηχανισμός του περιβάλλοντος, που επιτρέπει σε ένα περιβάλλον να υπάρχει στην εκκίνηση και παρέχει έναν τρόπο στα σενάρια να περνούν πληροφορίες σε υποσενάρια (διεργασίες) χωρίς τη χρήση ρητών παραμέτρων.

Το Μάρτιο του 2009 το περιοδικό Computerworld δημοσίευσε μια συνέντευξη με τον Steve Bourne (*[https://web.archive.org/web/20100111203059/http://www.computerworld.com.au/article/279011/-z_programming_languages_bourne_shell_sh/ The A-Z of Programming Languages: Bourne shell, or sh]*), η οποία περιέχει λεπτομέρειες για την προέλευση και τις σχεδιαστικές αποφάσεις του Κελύφους Bourne.

## Μειονεκτήματα
Ένα μειονέκτημα της γλώσσας ήταν ότι δε διευκόλυνε την αλληλεπίδραση με το χρήστη (το μόνο που έκανε ήταν η χρήση των συναρτήσεων κελύφους, και αυτό προστέθηκε αργότερα).

## Σημαντικά χαρακτηριστικά

Το κέλυφος Bourne περιλαμβάνει μεταξύ άλλων τα εξής χαρακτηριστικά:

* τα σενάρια μπορούν να κληθούν σαν εντολές, χρησιμοποιώντας μόνο το όνομα αρχείου τους
* μπορεί να χρησιμοποιηθεί είτε αλληλεπιδραστικά είτε όχι
* επιτρέπει και σύγχρονη και ασύγχρονη εκτέλεση εντολών
* υποστηρίζει την ανακατεύθυνση της εισόδου και της εξόδου, και τις διασωληνώσεις (pipelines)
* παρέχει ένα σύνολο από ενσωματωμένες εντολές
* παρέχει δομές ελέγχου της ροής, quotation facilities, και συναρτήσεις
* μεταβλητές χωρίς τύπο
* παρέχει τοπικές και καθολικές εμβέλειες
* τα σενάρια δε χρειάζονται μεταγλώττιση πριν την εκτέλεση
* δεν περιέχει εντολή goto, επομένως ίσως να χρειάζεται αναδόμηση του κώδικα
* *[[Αντικατάσταση εντολής]]* με τη χρήση ανάποδων αποστρόφων: ``εντολή``
* *[[Here document]]s* με τη χρήση του `&lt;&lt;` για την εισαγωγή ενός τμήματος κειμένου εισόδου μέσα σε ένα σενάριο
* βρόχοι "*<code>for ~ do ~ done</code>*", και χρήση του `$*` για επανάληψη πάνω στα ορίσματα
* μηχανισμός επιλογής "*<code>case ~ in ~ esac</code>*", ο οποίος κυρίως χρησιμοποιείται για τη διευκόλυνση του περάσματος παραμέτρων
* το *<code>sh</code>* παρείχε υποστήριξη για μεταβλητές περιβάλλοντος με τη χρήση παραμέτρων λέξεων-κλειδιών και μεταβλητών που μπορούσαν να εξαχθούν στο περιβάλλον (exportable)
* περιέχει ισχυρές ικανότητες ελέγχου της εισόδου και της εξόδου, καθώς επίσης και εντολές ταιριάσματος εκφράσεων (expression matching)

Το κέλυφος Bourne εισήγαγε τη σύμβαση να χρησιμοποιείται ο περιγραφέας αρχείου `2&gt;` για μηνύματα λάθους, επιτρέποντας μεγαλύτερο προγραμματιστικό έλεγχο στη διάρκεια των σεναρίων, κρατώντας τα μηνύματα λάθους ξεχωριστά από τα δεδομένα.

Κατά τη διάρκεια ετών, το κέλυφος Bourne εμπλουτίστηκε στην AT&T. Οι διάφορες παραλλαγές του παίρνουν έτσι το όνομά τους από την αντίστοιχη έκδοση του AT&T Unix με την οποία κυκλοφόρησαν (σημαντικές παραλλαγές είναι η Version7, η SystemIII, η SVR2, η SVR3 και η SVR4). Δεν γινόταν αρίθμηση εκδόσεων του κελύφους, και ο μοναδικός τρόπος να προσδιοριστεί ήταν ο έλεγχος των χαρακτηριστικών του.

Ο Stephen Bourne συνέχισε με αυτό το κέλυφος κάποια χαρακτηριστικά του μεταγλωττιστή της ALGOL 68C, πάνω στον οποίο δούλευε στο Πανεπιστήμιο του Κέμπριτζ. Ειδικότερα ξαναχρησιμοποίησε τις προτάσεις της ALGOL 68 "`<u>'''if'''</u> ~ <u>then</u> ~ <u>elif</u> ~ <u>else</u> ~ <u>'''fi'''</u>`", "`<u>'''case'''</u> ~ <u>in</u> ~ <u>out</u> ~ <u>'''esac'''</u>`" και "`<u>for</u> ~ <u>while</u> ~ <u>'''do'''</u> ~ <u>'''od'''</u>`" στην κοινή σύνταξη κελύφους Bourne του Unix. Επιπλέον - αν και το κέλυφος v7 είναι γραμμένο σε C
- ο Bourne εκμεταλλεύτηκε κάποιες μακροεντολές για να δώσει ένα "άρωμα" ALGOL 68 στον πηγαίο κώδικα C.

## Απόγονοι
Το Κέλυφος Korn (ksh) που δημιουργήθηκε από τον David Korn, ήταν μια μέση οδός μεταξύ του κελύφους Bourne και του κελύφους C. Η σύνταξή του προήλθε από το κέλυφος Bourne, αλλά ο έλεγχος εργασιών (job control) περιέχει χαρακτηριστικά όπως αυτά του κελύφους C. Η λειτουργικότητα του αυθεντικού Κελύφους Korn (γνωστού σαν ksh88 από το έτος στο οποίο κυκλοφόρησε για πρώτη φορά) χρησιμοποιήθηκε σαν βάση για το πρότυπο κελύφους POSIX. Μια νεότερη έκδοση, το ksh93, έχει γίνει ανοιχτού κώδικα από το 2000 και χρησιμοποιείται σε κάποιες διανομές Linux. Υπάρχει επίσης ένας κλώνος του ksh88 που είναι γνωστός σαν pdksh, και είναι το προεπιλεγμένο κέλυφος όλων των χρηστών στο OpenBSD.

Το rc δημιουργήθηκε στα Bell Labs από τον Tom Duff σαν αντικαταστάτης του sh για την Έκδοση 10 του Unix. Αποτελεί το προεπιλεγμένο κέλυφος για το Plan 9 from Bell Labs. Έχει μεταφρθεί στο UNIX σαν μέρος του Plan 9 from User Space.

Το Κέλυφος Bash, γνωστό και σαν *Bourne-Again shell*, δημιουργήθηκε αργότερα από το εγχείρημα GNU και έχει χαρακτηριστικά του κελύφους Bourne, του csh και του ksh.

Λόγω θεμάτων copyright σχετικά με το Κέλυφος Bourne, επειδή χρησιμοποιήθηκε σε ιστορικές κυκλοφορίες του CSRG BSD, ο Kenneth Almquist έφτιαξε έναν κλώνο του Κελύφους Bourne, γνωστού και σαν Κέλυφος Almquist (Almquist Shell), το οποίο διατίθεται υπό την άδεια λογισμικού BSD, και χρησιμοποιείται σε κάποιους απόγονους του BSD σήμερα, και σε καταστάσεις περιορισμένης μνήμης. Το Κέλυφος Almquist μεταφέρθηκε στο Linux, και το αποτέλεσμα μετονομάστηκε σε Debian Almquist shell, ή dash. Το κέλυφος αυτό προσφέρει ταχύτερη εκτέλεση των κλασικών σεναρίων του sh με λιγότερες απαιτήσεις μνήμης από τον συνηθισμένο αντικαταστάτη του, το bash. Η χρήση του τείνει να αποκαλύπτει ιδιώματα του bash (bashisms) που χρησιμοποιούνται λανθασμένα από προγραμματιστές που κάνουν λάθος παραδοχές γράφοντας σενάρια που προορίζονται για εκτέλεση από το sh.

## Χρήση
Το κέλυφος Bourne παλιά ήταν το βασικό κέλυφος όλων των συστημάτων με το λογότυπο Unix, αν και ιστορικά τα συστήματα βασισμένα στο BSD είχαν πολλά σενάρια γραμμένα για csh. Τα σενάρια κελύφους Bourne μπορούν συνήθως να εκτελεστούν με bash ή με ash/dash στο GNU/Linux ή σε άλλα Unix-οειδή συστήματα.

## Δείτε επίσης
* Διερμηνέας γραμμής εντολών
* GNU Bash
* rc

## Παραπομπές


## Εξωτερικοί σύνδεσμοι
* UNIX Shell Script Tutorials & Reference 
* The individual members of "The Traditional Bourne Shell Family" 
* Actual C source code for the Bourne shell using mac.h macros 
* Original Bourne Shell documentation from 1978 
* A port of the "heirloom" SVR4 Bourne shell from OpenSolaris to other Unix-like systems 
* Bourne Shell Tutorial (σύνταξη) 

Κατηγορία:Γλώσσες προγραμματισμού σεναρίων
Κατηγορία:Κελύφη του Unix