7ο Εργαστήριο - Ο φλοιός Bash και η διαμόρφωση του

Σχετικά έγγραφα
9ο Εργαστήριο - Ο φλοιός Bash και η διαµόρφωση του

ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Τµήµα Μηχανικών Πληροφορικής ΤΕ Λειτουργικά Συστήµατα (Εργαστήριο) Διδάσκων: I. Τσακνάκης. 7ο Εργαστήριο

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

Λειτουργικά Συστήματα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Λειτουργικά Συστήματα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

Μερικές άλλες χρήσιμες εντολές

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

ΜΑΘΗΜΑ: ΕΙΑΓΩΓΗ ΣΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 9o ΕΡΓΑΣΤΗΡΙΟ

Πως δημιουργούμε ένα νέο αρχείο κειμένου; Με τρεις τρόπους:

[11] Υπολογιστικά συστήματα: Στρώματα. Περιεχόμενα. Εισαγωγή. επικοινωνία εφαρμογές λειτουργικό σύστημα προγράμματα υλικό

ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Λειτουργικά Συστήματα

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. Εισαγωγή στο Unix

3ο Εργαστήριο Βασικές εντολές διαχείρισης αρχείων σε LINUX

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

Εισαγωγή στα Λειτουργικά Συστήματα

Shell Scripts: loops / if / test

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ

Μερικές άλλες χρήσιμες εντολές

Επαναληπτικές Ασκήσεις

ΑΣΚΗΣΗ 2 -ΑΚΥΡΩΣΗ ΣΗΜΑΣΙΑΣ ΕΙΔΙΚΩΝ ΧΑΡΑΚΤΗΡΩΝ

Εισαγωγή στην Αριθμητική Ανάλυση

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. UNIX Μέρος 1

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Linux με τη χρήση κονσόλας

2ο Εργαστήριο. Εισαγωγική στο Λ.Σ. LINUX Γενικές εντολές συστήματος και χρηστών

ΟΛΑ ΤΑ SCRIPT files πρέπει να είναι ΕΚΤΕΛΕΣΙΜΑ: $*, : ΟΛΑ - Η λίστα (ο πίνακας) με τα ορίσματα $# πλήθος παραμέτρων. one two third parameter

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Διαδικασιακός Προγραμματισμός

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΤΕΙΘ ΣΤΕΦ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 3o ΕΡΓΑΣΤΗΡΙΟ

Λειτουργικά Συστήματα. Άσκηση Πράξη. Shell Programming

Τυπικές χρήσεις της Matlab

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

Εργαστήριο Λειτουργικών Συστημάτων. Shell Programming

Προγραμματισμός Διαχείρισης Συστημάτων ΙΙ

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Λειτουργικά Συστήματα. Shell Programming

ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Τμήμα Μηχανικών Πληροφορικής ΤΕ Λειτουργικά Συστήματα (Εργαστήριο) Διδάσκων: I. Τσακνάκης. 8ο Εργαστήριο

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Διαδικασιακός Προγραμματισμός

Εργαστήριο ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ UNIX

Σημειωματάαριο Δευτέρας 16 Οκτ. 2017

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

Εισαγωγή στον Προγραμματισμό

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Επισκόπηση Λ.Σ. Εργαστηριακές Ασκήσεις

Εισαγωγή στο λειτουργικό σύστηµα Unix

Ψευδοκώδικας. November 7, 2011

3 ο Εργαστήριο Μεταβλητές, Τελεστές

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

Προγραμματισμός Διαχείρισης Συστημάτων Ι

Εντολές ελέγχου ροής if, for, while, do-while

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στο Λ.Σ. UNIX

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Η Απάντηση. Φύλλο Εργασίας. Μηνύματα

Γραφικά υπολογιστών Εργαστήριο 1 Εισαγωγή στην Python

Προγραμματιστικό Περιβάλλον

Εισαγωγή στον Προγραμματισμό

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Λειτουργικά Συστήματα

Σύντομη εισαγωγή στο λειτουργικό σύστημα Linux

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

Ανάπτυξη και Σχεδίαση Λογισμικού

wc -l <file1 10 ή να μετρήσω πόσες γραμμές δίνει μια οποιαδήποτε άλλη εντολή π.χ. η finger : finger wc -l 8

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ I. 1. Εισαγωγή 3 ΠΡΟΛΟΓΟΣ

Δίκτυα Η/Υ στην Επιχείρηση

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Αβδέλαρου Κωνσταντίνα

ΕΡΓΑΣΤΗΡΙΟ 1: Εισαγωγή, Χρήσιμες Εφαρμογές

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η γλώσσα προγραμματισμού Strange

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στην Python και στο IDLE

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα;

Transcript:

ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Τμήμα Μηχανικών Πληροφορικής ΤΕ Λειτουργικά Συστήματα (Εργαστήριο) Διδάσκων: I. Τσακνάκης 7ο Εργαστήριο - Ο φλοιός Bash και η διαμόρφωση του Ο φλοιός γενικά Μεταβλητές Ψευδώνυμα (aliases) Αρχεία εκκίνησης φλοιού Ο Φλοιός login Επεξεργασία της γραμμής εντολών από το φλοιό Ασκήσεις 1

Ο φλοιός Bash και η διαμόρφωση του Ο φλοιός γενικά Ανάλογα με το σύστημα Unix ή Linux που χρησιμοποιούμε μας διατίθενται και διαφορετικά κελύφη (shells). Για κάθε χρήστη στη συνέχεια "φορτώνεται" στην κύρια μνήμη ένα διαφορετικό αντίγραφο του φλοιού που παρέχει ένα σύστημα επικοινωνίας μεταξύ του χρήστη και του Unix ή Linux. Οι πιο διαδεδομένοι φλοιοί είναι οι Bourne shell (sh), C shell (csh), Korn shell (ksh), Enhanced C shell (tcsh), Bourne Again Shell (bash), rc, pdksh, tcsh, zsh και ash. Οι φλοιοί συσχετίζονται μεταξύ τους αφού έχουν κοινά στοιχεία και λειτουργίες ή ανήκουν όπως θα λέγαμε στην ίδια ομάδα. Για να δείτε τους διαθέσιμους φλοιούς του συστήματος, δώστε την εντολή : cat /etc/shells. Για να διαπιστώσετε το φλοιό που χρησιμοποιείτε, δώστε την εντολή: echo $SHELL. Για αλλαγή του φλοιού, δώστε την εντολή: chsh, πληκτρολογήστε τον κωδικό σας εφόσον ζητηθεί και μετά τη διαδρομή για το νέο φλοιό. Ο φλοιός Bash μεσολαβεί μεταξύ του πυρήνα και του περιβάλλοντος του χρήστη χωρίς να αποτελεί τμήμα του λειτουργικού συστήματος. Είναι μία επιπλέον εντολή του λειτουργικού συστήματος. ανιχνέυει τις εντολές και εκτελεί τις εφαρμογές. Μετατρέπει την είσοδο του χρήστη σε παραγωγική διαδικασία, διερμηνεύει εντολές και συνδέει τη γραμμή εντολών με το υπόλοιπο σύστημα. Επιπλέον είναι και γλώσσα προγραμματισμού αφού διαθέτει δικές του εντολές, διατηρεί λίστα μεταβλητών, χρησιμοποιεί μεταβλητές περιβάλλοντος και ειδικούς χαρακτήρες, επιτρέπει τη δημιουργία συναρτήσεων, ενώ διαθέτει μηχανισμούς αντικατάστασης εντολών και ακύρωσης των ειδικων χαρακτήρων. Αν φανταστούμε τον πυρήνα (kernel) του λειτουργικού συστήματος Linux στο κέντρο μιας σφαίρας, τότε ο φλοιός είναι το εξωτερικό επίπεδο που περιβάλει τον πυρήνα. Παραμετροποίηση (διαμόρφωση) του φλοιού bash Ο φλοιός διαμορφώνεται με τη χρήση διαφόρων μηχανισμών, όπως: τοπικές μεταβλητές, ψευδώνυμα, συναρτήσεις, τις εντολές set και shopt. Εξάλλου, ο φλοιός διαμορφώνει άλλες εντολές και εφαρμογές, μέσω των μεταβλητών περιβάλλοντος. Όλες οι ρυθμίσεις, μπορούν να γίνουν είτε για ένα σύστημα από το διαχειριστή, είτε για κάθε χρήστη ξεχωριστά από τους ίδιους τους χρήστες. 2

Μεταβλητές Γενικά Οι μεταβλητές έχουν θεμελιώδη σημασία για την παραμετροποίηση, τόσο του φλοιού όσο και οποιασδήποτε άλλης εφαρμογής. Μία μεταβλητή είναι μία ετικέτα για κάποια τιμή. Η τιμή μπορεί να αλλάζει με την πάροδο του χρόνου, από ένα σύστημα σε ένα άλλο, από τον ένα χρήστη στον άλλο. Όμως η ετικέτα είναι σταθερή. Έτσι, ένα shell script (δηλαδή, ένα αρχείο που περιέχει εντολές προς τον φλοιό) μπορεί να τοποθετεί μια τιμή στο $HOME, που δεν είναι τίποτα άλλο παρά μία αναφορά στο home directory του χρήστη. Η τιμή αυτή διαφέρει από χρήστη σε χρήστη, αλλά πάντα αναφέρεται στο home directory του χρήστη που εκτελεί το script. Οι μεταβλητές είναι δύο ειδών: τοπικές μεταβλητές ή μεταβλητές φλοιού (local variables, shell variables) που χρησιμοποιούνται μόνο από τον φλοιό και μεταβλητές περιβάλλοντος (environment variables) που χρησιμοποιούνται από το φλοιό για να περνάει τιμές στις εφαρμογές που καλεί. Το αποτέλεσμα είναι ότι οι τοπικές μεταβλητές χρησιμοποιούνται για την παραμετροποίηση του ίδιου του φλοιού, ενώ οι μεταβλητές περιβάλλοντος χρησιμοποιούνται για την παραμετροποίηση άλλων εντολών. Για να δούμε τις μεταβλητές και τις τιμές τους χρησιμοποιούμε τις εντολές set, env και echo. Η εντολή set εμφανίζει όλες τις μεταβλητές, η env μόνο τις μεταβλητές περιβάλλοντος και η echo την τιμή μίας μόνο μεταβλητής. Τοπικές μεταβλητές Οι τοπικές μεταβλητές (ή μεταβλητές φλοιού) είναι μεταβλητές που ο φλοιός δεν τις περνάει σε άλλες εντολές. Χρησιμοποιούνται για την ρύθμιση του ίδιου του φλοιού. Χρησιμοποιούνται επίσης και σε shell scripts, όπως θα δούμε και σε άλλη παράγραφο. Ο χρήστης έχει τη δυνατότητα να ορίσει, στον τρέχοντα φλοιό που εργάζεται, τις δικές του τοπικές μεταβλητές. Δημιουργία τοπικής μεταβλητής Για να ορίσουμε μία μεταβλητή, δίνουμε την εντολή: VARIABLE=VALUE Συμβατικά, τα ονόματα των μεταβλητών είναι με κεφαλαία γράμματα. Τα ονόματα των μεταβλητών και οι τιμές τους δεν πρέπει να περιέχουν κενούς χαρακτήρες. Έτσι αν η τιμή περιέχει κενά, πρέπει να χρησιμοποιούνται διπλά εισαγωγικά ("). Π.χ. WELCOME="Welcome to Linux" Για να εμφανίσουμε την τιμή μιας μεταβλητής, χρησιμοποιούμε την echo: Π.χ. echo $WELCOME Πρέπει να επισημανθεί ότι, για να αναφερθούμε στην τιμή μίας μεταβλητής χρησιμοποιούμε το χαρακτήρα $ πριν από το όνομα της μεταβλητής. Παράδειγμα $ first_name=john $ surname=tsaknakis Τότε η εντολή : $ echo $first_name $surname, θα εμφανίσει : John Tsaknakis. 3

Για μία πλήρη λίστα των τοπικών μεταβλητών, συμβουλευτείτε το τμήμα Shell variables στη σελίδα bash του man. Συνήθεις τοπικές μεταβλητές HISTFILESIZE: ορίζει πόσες εντολές αποθηκεύονται στο αρχείο του ιστορικού. HISTFILE: ορίζει το όνομα του αρχείου στο οποίο αποθηκεύονται οι εντολές του ιστορικού. HISTSIZE: ορίζει πόσες εντολές «θυμάται» ο φλοιός κατά τη διάρκεια της συνεδρίας του χρήστη. COLUMNS: ορίζει το πλάτος (σε χαρακτήρες) του τερματικού. LINES: ορίζει το ύψος (σε γραμμές) του τερματικού. Η μεταβλητή PS1, ορίζει τη μορφή του συμβόλου προτροπής εντολών (prompt) και μπορεί να διαμορφωθεί από το χρήστη με ακολουθίες χαρακτήρων. Μερικοί από τους χαρακτήρες (escape sequences) που χρησιμοποιούνται για τη μορφοποίηση τoυ prompt είναι οι: - \d για την ημερομηνία - \h για το όνομα της μηχανής - \t για την ώρα - \u για το όνομα χρήστη - \w για τον τρέχοντα κατάλογο εργασίας - \! για τον αύξοντα αριθμό της εντολής στο ιστορικό - \$ για ενδεικτικό απλού χρήστη (εμφανίζει #) ή χρήστη με δικαιώματα διαχείρισης (εμφανίζει $) Παράδειγμα: Η εντολή : PS1="\u@\h:\w<\!>\$" θα εμφανίζει το prompt ως εξής: adam@ekdd-srv-01:/tmp<235>$ Για μία πλήρη λίστα των escape sequences συμβουλευτείτε το τμήμα PROMPTING στη σελίδα bash του man. Μεταβλητές περιβάλλοντος Οι τοπικές μεταβλητές υπάρχουν μόνο μέσα στον τρέχοντα φλοιό. Ο φλοιός περνάει σε άλλους φλοιούς μόνο τις μεταβλητές περιβάλλοντος, όπως είναι για παράδειγμα η μεταβλητή EDITOR, η οποία χρησιμοποιείται για να γνωρίζουν οι διάφορες εφαρμογές με ποια εφαρμογή προτιμά ο χρήστης να επεξεργάζεται αρχεία κειμένου. Οι μεταβλητές περιβάλλοντος υπάρχουν στον οικείο κατάλογο και στον κατάλογο /etc. Για τον φλοιό bash, οι προκαθορισμένες μεταβλητές περιβάλλοντος ορίζονται στο αρχείο /etc/profile και για τον κάθε χρήστη στο αρχείο.bash_profile που υπάρχει στον προσωπικό του κατάλογο. 4

Δημιουργία μεταβλητής περιβάλλοντος Ο παραδοσιακός τρόπος για τη δημιουργία μία μεταβλητής περιβάλλοντος είναι πρώτα να δημιουργήσουμε μία τοπική μεταβλητή και μετά να την κάνουμε export σε μεταβλητή περιβάλλοντος. Παράδειγμα: $ EDITOR=/usr/bin/vim $ export EDITOR Με την πρώτη εντολή δημιουργείται μία τοπική μεταβλητή EDITOR που περιέχει το εκτελέσιμο αρχείο μαζί με το path της εφαρογής κειμένου που προτιμά ο χρήστης και με την δεύτερη εντολή η μεταβλητή EDITOR μετατρέπεται σε μεταβλητή περιβάλλοντος. Ο φλοιός bash υποστηρίζει και συντετμημένη σύνταξη. $ export EDITOR=/usr/bin/vim Συνήθεις μεταβλητές περιβάλλοντος Ορισμένες συχνά χρησιμoποιούμενες μεταβλητές περιβάλλοντος είναι οι παρακάτω: HOME. Είναι το πλήρες όνομα διαδρομής - μονοπάτι για το home directory του χρήστη LOGNAME. Είναι ο κωδικός χρήστη (user ID) ή το όνομα του λογαριασμού (π.χ. tsaknakis). LANG. Είναι το αναγνωριστικό της προκαθορισμένης γλώσσας που πρέπει να χρησιμοποιούν οι εφαρμογές. PWD. Είναι ο τρέχων κατάλογος εργασίας. EDITOR. Εϊναι ο επιθυμητός text editor του χρήστη LESS. Είναι οι επιλογές για την εντολή less. SHELL. Είναι το μονοπάτι για το φλοιό στον οποίο κάνατε login. USER. Είναι το όνομα του λογαριασμού του χρήστη. TERM. Ορίζει τον τύπο του τερματικού που χρησιμοποιείτε. Σε περίπτωση που το τερματικό σας δε δουλεύει σωστά, π.χ. επειδή ανοίξατε ένα δυαδικό αρχείο, εκτελέστε την εντολή reset. PATH. Η μεταβλητή PATH περιέχει μία λίστα καταλόγων στους οποίους βρίσκονται οι εντολές. Έτσι, όταν δεν δίνουμε μονοπάτι για μία εντολή, ο φλοιός αναζητά την εντολή στους καταλόγους αυτούς και εκτελεί την πρώτη που συναντά και ταιριάζει με την εντολή της οποίας την εκτέλεση ζητήσαμε. Η εντολή which ψάχνει στη λίστα των καταλόγων και επιστρέφει το πλήρες μονοπάτι της εντολής που θα εκτελεστεί. Για παράδειγμα, η εκτέλεση της εντολής which less, θα μας ενημερώσει για το πλήρες μονοπάτι του αρχείου το οποίο θα εκτελεστεί όταν ζητήσουμε την εκτέλεση της εντολής less. Για να εκτελέσουμε την εντολή less που βρίσκεται σε άλλο αρχείο και όχι σε αυτό που επιστρέφει η which, αρκεί να ζητήσουμε την εντολή μαζί με το μονοπάτι της, π.χ../less. PS1. Είναι το κύριο προτρεπτικό σήμα (prompt string) που εμφανίζει το Λ.Σ. (π.χ. $). 5

PS2. Εϊναι ο δείκτης > που χρησιμοποιείται για να συνεχιστεί η συμπλήρωση της εντολής στην από κάτω γραμμή. ΤΖ. Χρησιμοποιείται για τον καθορισμό της ζώνης ώρας (time zone) του συστήματος. MAIL. Ορίζει το γραμματοκιβώτιο (mailbox) του χρήστη. Πρόκειται για το αρχείο που αποθηκεύονται τα μηνύματα που λαμβάνει ο χρήσης μέσω ηλεκτρονικού ταχυδρομείου (π.χ. /var/mail/john). MAILCHECK. Ορίζει κάθε πότε το σύστημα θα ελέγχει αν υπάρχει νέο μήνυμα (email) στο γραμματοκιβώτιο του χρήστη. Για παράδειγμα αν έχει τιμή 300 το Λ.Σ. κάθε 5 λεπτά θα πραγματοποιεί έλεγχο για τη λήψη νέου email και στην περίπτωση νέας άφιξης θα εμφανίσει το μήνυμα : "You have mail". Χρήσιμες εντολές Η εντολή env εμφανίζει τις μεταβλητές περιβάλλοντος που υπάρχουν στο κέλυφος. Η εντολή set εμφανίζει όλες τις μεταβλητές που υπάρχουν στο κέλυφος. Η εντολή unset χρησιμοποιείται για να αφαιρεθεί μία μεταβλητή από το κέλυφος. Η εντολή printenv μπορεί να χρησιμοποιηθεί για να τυπώσει το περιεχόμενο μιας μεταβλητής, όταν δοθεί το όνομα της (π.χ. printenv PWD). Χρήση ειδικών χαρακτήρων στην γραμμή εντολών Η γραμμή εντολών του φλοιού bash παρέχει πολλές ευκολίες στο χρήστη. Οι σημαντικότερες από αυτές είναι: Αντικατάσταση μεταχαρακτήρων (File globbing) File globbing: είναι η λειτουργία αντικατάστασης των wildcards (ή μεταχαρακτήρων ή χαρακτήρων-μπαλαντέρ) *, ταιριάζει με οποιοδήποτε πλήθος χαρακτήρων?, ταιριάζει με ένα μόνο (οποιοδήποτε) χαρακτήρα [a-z], ταιριάζει με οποιοδήποτε χαρακτήρα ανήκει σε αυτό το εύρος [^a-z], ταιριάζει με οποιοδήποτε χαρακτήρα δεν ανήκει σε αυτό το εύρος Η εντολή echo μπορεί να χρησιμοποιηθεί για να ελέγξουμε αν η αντικατάσταση των μεταχαρακτήρων έγινε όπως σκοπεύαμε, πριν εκτελέσουμε μία εντολή με μεταχαρακτήρες. 6

Το πλήκτρο Tab Το πλήκτρο Tab χρησιμοποιείται για να συμπληρώσουμε το όνομα εντολής ή αρχείου (που πρέπει να είναι όρισμα σε μία εντολή) Αγκύλες {} Οι αγκύλες { και } χρησιμοποιούνται για να δημιουργούμε πρότυπα συμβολοσειρών. Για το διαχωρισμό των συμβολοσειρών χρησιμοποιείται ο χαρακτήρας κόμμα (,). Αν ο πρώτος χαρακτήρας είναι κόμμα, εννοείται η κενή συμβολοσειρά. H εντολή echo x{a,b} είναι ισοδύναμη με την echo xa xb. H εντολή cp file.txt{,-save} είναι ισοδύναμη με την cp file.txt file.txt-save. Αποτελέσματα εντολών Μπορείτε να συμπεριλάβετε τα αποτελέσματα της εκτέλεσης μίας εντολής, χρησιμοποιώντας το $( ) ή τα ``. Οι εντολές: echo "This machine is named: $(hostname)" echo "This machine is named: `hostname`" παράγουν τα ίδια αποτελέσματα. Αρχικά θα εκτελεστεί η εντολή hostname και το αποτέλεσμά της θα αντικατασταθεί στην εντολή που δώσαμε. Μαθηματικές πράξεις Ορισμένες μαθηματικές πράξεις μπορούν να εκτελεστούν από το φλοιό. Με χρήση της εντολής expr:, π.χ. echo Area: `expr $X \* $Y`. Η χρήση της expr δεν είναι βολική γιατί έχει αυστηρό συντακτικό. Με χρήση της $[ ]: Οι εντολές echo Area: $[$X*$Y] echo Area: $[ $X * $Y ] και echo Area: $[ $X*$Y ] είναι ισοδύναμες, γιατί το συντακτικό είναι ανεκτικό. Βασικές πράξεις που εκτελούνται από το φλοιό και οι τελεστές τους: πρόσθεση (+), αφαίρεση (-), πολλαπλασιασμός (*), διαίρεση (/), ύψωση σε δύναμη (**), υπόλοιπο διαίρεσης (%). Στη σελίδα bash του man, τμήμα ARITHMETIC EVALUATIONS, υπάρχει πλήρης κατάλογος των αριθμητικών πράξεων που μπορεί να εκτελέσει ο φλοιός. 7

Ακύρωση της σημασίας των ειδικών χαρακτήρων Για να ακυρώσουμε την σημασία των ειδικών χαρακτήρων και να τους χειριστούμε ως συνηθισμένους χαρακτήρες πρέπει να ενημερώσουμε το φλοιό. Ο χαρακτήρας backslash (\) Η εντολή echo Your cost: \$5.00 δεν θα αναζητήσει μεταβλητή (ακυρώνεται η ειδική σημασία του χαρακτήρα $). Έστω ότι θέλουμε να βρούμε όλα τα αρχεία που βρίσκονται στον τρέχοντα κατάλογο και το όνομά τους ξεκινάει από file*. Αν εκτελέσουμε την εντολή: find file* ο φλοιός θα μας επιστρέψει όλα τα αρχεία των οποίων το όνομα αρχίζει με "file". Εμείς όμως θέλουμε να επιστραφούν μόνο τα αρχεία των οποίων το όνομα αρχίζει με "file*". Για να βρούμε αυτό που ψάχνουμε πρέπει να δώσουμε την εντολή ως find file\* Μονά και διπλά εισαγωγικά Ορισμένες φορές θέλουμε να ακυρώσουμε την ειδική σημασία πολλών χαρακτήρων στη σειρά, π.χ. στην εντολή echo \*\*\* SALES \*\*\* είναι πιο βολικό (και πιο σωστό) να χρησιμοποιήσετε τα μονά ή τα διπλά εισαγωγικά. Τα μονά εισαγωγικά ακυρώνουν την ειδική σημασία όλων των χαρακτήρων. Τα διπλά εισαγωγικά ακυρώνουν την ειδική σημασία όλων των χαρακτήρων εκτός από τους $, $(), $[], `, \,!. Σε πολλές περιπτώσεις η χρήση μονών ή διπλών εισαγωγικών παράγει τα ίδια αποτελέσματα. Συνδυασμοί πλήκτρων για τη γραμμή εντολών <Ctrl+a>, μετακίνηση στην αρχή της γραμμής <Ctrl+e>, μετακίνηση στo τέλος της γραμμής <Ctrl+u>, διαγραφή μέχρι την αρχή της γραμμής <Ctrl+k>, διαγραφή μέχρι το τέλος της γραμμής 8

Ψευδώνυμα (aliases) Τα ψευδώνυμα είναι συντομογραφίες μεγαλύτερων εντολών. Αν υπάρχουν εντολές που τις χρησιμοποιείτε συχνά αλλά είναι αρκετά μεγάλες, μπορείτε να τις κάνετε μικρότερες χρησιμοποιώντας ψευδώνυμα με την εντολή alias. Για να ορίσετε ένα ψευδώνυμο με την alias, πρώτα θα πρέπει να επιλέξετε το κατάλληλο αρχείο, για να τροποποιήσετε αναλογα με το κέλυφος που χρησιμποιείτε: Αν είστε χρήστης του bash πρέπει να χρησινοποιείτε το αρχείο : ~/.bashrc Αν είστε χρήστης του kash πρέπει να χρησινοποιείτε το αρχείο : ~/.kashrc Αν είστε χρήστης του csh πρέπει να χρησινοποιείτε το αρχείο : ~/.cshrc Πριν από κάθε τροποποίηση προτείνετε η διατήρηση ενός αντίγραφου ασφαλείας. Στη συνέχεια εκτελέστε την εντολή: nano.bashrc με την οποία επιλέγετε ο διορθωτής nano για την τροποποίηση του αρχείου.bashrc (για το φλοιό bash). Αφού προσθέσουμε όσα ψευδώνυμα θέλουμε, αποθηκεύσουμε τις τροποποιήσεις και βγαίνουμε από τον διορθωτή κειμένου nano. Παραδείγματα Με την εντολή : alias quit="logout", δημιουργούμε το ψευδώνυμο quit για την εντολή logout. Με την εντολή : alias c=clear, δημιουργούμε το ψευδώνυμο c για την εντολή clear. Με την εντολή : alias rm="rm -i", δημιουργούμε το ψευδώνυμο rm για την εντολή rm -i. Έτσι κάθε φορά που καλείται η εντολή rm θα εκτελείται η rm -i. Για να χρησιμοποιήσπυμε την εντολή rm, αντί του alias της (rm i), δίνουμε την εντολή βάζοντας μπροστά της το χαρακτήρα \: \rm r Junk. Αν θέλουμε να δούμε όλα τα ψευδώνυμα,τότε καλούμε την εντολή alias χωρίς ορίσματα. Για να δούμε ένα συγκεκριμένο ψευδώνυμο, χρησιμοποιούμε την εντολή alias με το ψευδώνυμο που θέλουμε να δούμετο ως όρισμα του. π.χ. alias dir. 9

Αρχεία εκκίνησης φλοιού Τα shell startup scripts (αρχεία εκκίνησης φλοιού) εκτελούνται κατά την εκκίνηση του φλοιού από τον χρήστη. Οι περισσότερες από τις ρυθμίσεις που είδαμε μέχρι τώρα ισχύουν μόνο για τον τρέχοντα φλοιό. Ωστόσο, προφανώς, όλοι οι χρήστες επιθυμούν οι ρυθμίσεις τους (μεταβλητές, ψευδώνυμα και άλλες ρυθμίσεις) να ισχύουν γενικά (όποτε ξεκινούν ένα νέο φλοιό) και όχι μόνο στον τρέχοντα φλοιό. Γι αυτό το λόγο χρησιμοποιούμε τα shell startup scripts, δηλαδή αρχεία εντολών που εκτελούνται κατά την εκκίνηση του φλοιού. Οι περισσότερες από αυτές τις ρυθμίσεις γίνονται από το διαχειριστή του συστήματος, αλλά και οι χρήστες μπορούν να ρυθμίζουν ότι αφορά το περιβάλλον εργασίας τους. Αυτό γίνεται με την επεξεργασία των startup scripts που βρίσκονται στο home directory κάθε χρήστη. Ο Φλοιός login O φλοιός login είναι ο πρώτος φλοιός που εκτελείται για κάθε χρήστη, είναι δηλαδή ο φλοιός στον οποίο γίνεται η επιβεβαίωση της ταυτότητας του χρήστη. Οι φλοιοί που ξεκινούν από τον χρήστη με άλλο τρόπο και όχι με το login, π.χ. με την εκτέλεση της εντολής bash, καλούνται no-login shell. Η διαφορά μεταξύ των login και no-login shells είναι ότι εκτελούνται διαφορετικά αρχεία εκκίνησης (startup scripts). Σειρά εκτέλεσης startup scripts Στα login shells εκτελούνται, με τη σειρά, τα ακόλουθα startup scripts: 1. /etc/profile 2. /etc/profile.d 3. ~/.bash_profile 4. ~/.bashrc 5. /etc/bashrc Κάθε script μπορεί να κάνει αλλαγές σε ότι έχει οριστεί ήδη σε προηγούμενο script. Έτσι η μεταβλητή PATH ορίζεται στο script /etc/profile αλλά, κατόπιν, αλλάζει η τιμή της στο ~/.bash_profile. Στα no-login shells εκτελούνται, με τη σειρά, τα ακόλουθα startup scripts: 1. ~/.bashrc 2. /etc/bashrc 3. /etc/profile.d Όπως βλέπετε, τα no-login shells εκτελούν κάποια από τα script που εκτελούν τα login shells αλλά με διαφορετική σειρά. Τυπικές εντολές στα startup scripts Οι τυπικές εντολές που μπαίνουν στα startup scripts είναι οι ακόλουθες: ορισμοί τοπικών μεταβλητών, όπως η PS1, 10

ορισμοί μεταβλητών περιβάλλοντος, όπως η PATH και η LESS, ορισμοί ψευδωνύμων ή ενδεχομένως αναίρεση ανεπιθύμητων ψευδωνύμων που ορίστηκαν νωρίτερα με άλλο script. Αρχεία startup scripts Ιδιαίτερο ρόλο κατέχουν τα παρακάτω αρχεία - scripts: 1. Το αρχείο /etc/profile. Το αρχείο /etc/profile είναι το πρώτο που εκτελείται όταν ξεκινά ένα login shell. Τα no-login shells δεν εκτελούν το script αυτό. Το αρχείο αυτό είναι «καθολικό», εκτελείται δηλαδή για όλους τους χρήστες του συστήματος που χρησιμοποιούν ως login shell ένα φλοιό τύπου Bourne (όπως ο sh και ο bash). Στο script αυτό ορίζονται οι τιμές των μεταβλητών PATH, USER, LOGNAME, MAIL, HOSTNAME, HISTSIZE και INPUTRC καθώς επίσης εκτελούνται και τα scripts που βρίσκονται στον κατάλογο: /etc/profile.d. Στον κατάλογο /etc/profile.d περιέχονται πρόσθετα shell scripts,τα οποία μπορούν να επεξεργαστούν μόνο από τον διαχειριστή και όχι από τους χρήστες. 2. Τα αρχεία ~/.bash_profile και ~/.bashrc. Τα αρχεία ~/.bash_profile και ~/.bashrc ανήκουν στη δικαιοδοσία του χρήστη. Ο χρήστης μπορεί να θέσει μεταβλητές, ψευδώνυμα, και εντολές που θέλει να εκτελούνται όταν εκκινεί ένα shell. Το αρχείο ~/.bash_profile εκτελείται για login shells μόνο, ενώ το ~/.bashrc εκτελείται από login και no-login shells. Μην βάζετε ποτέ στο ~/.bashrc script εντολές που έχουν έξοδο στην οθόνη, όπως π.χ. η εντολή date. Τέτοιες εντολές πρέπει να μπαίνουν στο script ~/.bash_profile μόνο. 3. Το αρχείο ~/.bash_logout Το αρχείο ~/.bash_logout χρησιμοποιείται σπάνια. Εκτελείται κάθε φορά που ο χρήστης βγαίνει από το login shell, δηλαδή κάθε φορά που ο χρήστης βγαίνει από το σύστημα. Είναι πολύ χρήσιμο για να εκτελούμε προγράμματα κατά την έξοδό μας από το σύστημα. Ενδεικτικά αναφέρουμε: Αντίγραφο ασφαλείας των αρχείων του χρήστη. Διαγραφή προσωρινών αρχείων. 11

Επεξεργασία της γραμμής εντολών από το φλοιό Η διαδικασία της επεξεργασίας της γραμμής εντολών από το φλοιό είναι αρκετά σύνθετη. Μία αρκετά απλή εκδοχή της διαδικασίας αυτής είναι: Η γραμμή εντολών χωρίζεται σε λέξεις που χωρίζονται από κενά, tab, αλλαγές γραμμών, και άλλους ειδικούς χαρακτήρες όπως:,,, &, ;, (, ), <, >. Αντικατάσταση συναρτήσεων και ψευδωνύμων. Επέκταση των χαρακτήρων { και } και δημιουργία των αντίστοιχων συμβολοσειρών. Αντικατάσταση του χαρακτήρα ~ με την κατάλληλη συμβολοσειρά (~, ~bob, ~/files). Αντικατάσταση παραμέτρων και μεταβλητών. Αντικατάσταση των $, ${ }, $ (( )), $ [ ], $ ( ). Η γραμμή χωρίζεται σε λέξεις ξανά. Αντικατάσταση μεταχαρακτήρων σε ονόματα αρχείων (file globbing). Ανακατεύθυνση σε αρχεία, >, >>, <, <<, 2>, 2>>. Η εντολή εκτελείται. Συνθήκες Στο Unix δεν υπάρχει ξεχωριστή έννοια συνθήκης όπως σε άλλες γλώσσες. Οποιαδήποτε εντολή μπορεί να χρησιμοποιηθεί σαν συνθήκη. Για παράδειγμα μια εντολή read μπορεί να είναι συνθήκη για κάποιον βρόχο. Εφόσον η εντολή εκτελείται σωστά επιστρέφει κωδικό σωστής εκτέλεσης και η «συνθήκη» επαληθεύεται. Εφόσον εκτελεστεί λάθος επιστρέφει κωδικό λάθους και η συνθήκη είναι ψευδής. Ο κωδικός αυτός στο UNIX επιστρέφεται στην παράμετρο $? και για σωστή εκτέλεση είναι ο αριθμός 0 ενώ για λάθος εκτέλεση είναι ο αριθμός 1. Ορισμένες εντολές επιστρέφουν περισσότερους κώδικες για λάθος εκτέλεση όπως πχ η εντολή expr που θα δούμε παρακάτω. if Η εντολή if χρησιμοποιείται για εκτέλεση εντολών κάτω από συνθήκες. Η σύνταξή της είναι η ακόλουθη. if <συνθήκη>; then <εντολές> elif <συνθήκη>; then <εντολές> else <εντολές> fi Τα τμήματα elif και else είναι προαιρετικά, ενώ μπορούμε να έχουμε οσαδήποτε elif θέλουμε. Στην εκτέλεση της if εκτελούνται ΜΟΝΟ οι εντολές του ενός βρόχου, εκείνου που πληροί την συνθήκη. Μπορούμε να έχουμε πολλές if την μια μέσα στην άλλη. Η κάθε if πρέπει να βρίσκεται εξ ολοκλήρου μέσα σε ένα και μόνο μπλοκ της αμέσως προηγούμενης if. 12

test Η πιο συνηθισμένη εντολή-συνθήκη είναι η εντολή test. Η εντολή test παίρνει εσωτερικά συνθήκες με την έννοια που τις έχουμε γνωρίσει σε άλλες γλώσσες. Μπορεί να συγκρίνει αριθμούς (μόνο ακέραιους) να συγκρίνει strings, να δεχτεί λογικούς τελεστές και να κάνει πολλά ακόμα ενδιαφέροντα πράγματα. Άμα η εσωτερική συνθήκη της test ισχύει η test σαν εντολή επιστρέφει 0 στο $?, όπως κάθε εντολή που εκτελείτε σωστά, ενώ άμα δεν ισχύει επιστρέφει 1. Η ανοιχτή αγκύλη ( [ ) είναι ένας δεσμός (link) στην test και έτσι η εντολή μπορεί να γραφτεί και με την χρήση αγκύλων. Σε αυτήν την περίπτωση χρειάζεται να κλείσει η εντολή με την κλειστή αγκύλη ( ] ). Προσοχή στην σύνταξη όταν χρησιμοποιούμε αγκύλες γιατί πρέπει να βάλουμε κενά μετά την ανοιχτή ( [ ) και πριν την κλειστή αγκύλη. ( ] ) Συνήθως η εντολή test γράφεται με αγκύλες γιατί είναι πιο ευκολοδιάβαστη και σπάνια την βλέπουμε γραμμένη αλλιώς. Θα δείξουμε παραδείγματα και με τους δυο τρόπους γραφής: test s filename γράφεται και [ -s filename ] test r filename γράφεται και [ -r filename ] Ο παρακάτω πίνακας περιέχει της χρήσεις των παραμέτρων που δέχεται η test (options). Προσοχή στα κενά μέσα στα [ ]. 1. Εξετάζοντας αρχεία: [ -s file ] Το αρχείο δεν είναι άδειο [ -r file ] Το αρχείο είναι readable. Έχουμε δικαίωμα να το διαβάσουμε. [ -w file ] Το αρχείο είναι writeable. Έχουμε δικαίωμα να γράψουμε σε αυτό [ -x file ] Το αρχείο είναι executable. Έχουμε δικαίωμα να το εκτελέσουμε [ -f file ] Το αρχείο υπάρχει και είναι απλό αρχείο [ -d file ] Το αρχείο υπάρχει και είναι κατάλογος (directory) [ -c file ] Το αρχείο υπάρχει και είναι ειδικό αρχείο χαρακτήρων. Συνήθως συσκευή χαρακτήρων όπως ένα modem. [ -b file ] Το αρχείο υπάρχει και είναι ειδικό αρχείο τύπου block. Συνήθως συσκευή block όπως ένας σκληρός δίσκος 2. Εξετάζοντας strings Προσοχή στα κενά στις δυο πλευρές του = και των άλλων συμβόλων. [ -z string ] Το μήκος του string είναι μηδενικό. (0 χαρακτήρες) [ -n string ] Το μήκος του string είναι μη μηδενικό (έχει χαρακτήρες) [ string1 = string2 ] Τα δυο strings είναι ίδια [ string1!= string2 ] Τα δυο strings είναι διαφορετικά [ string ] Το string δεν είναι null 13

3. Εξετάζοντας ακεραίους. Προσοχή και εδώ στα κενά [ int1 eq int2 ] Οι δυο ακέραιοι είναι ίσοι [ int1 ne int2 ] Οι δυο ακέραιοι είναι άνισοι [ int1 ge int2 ] Ο πρώτος ακέραιος είναι μεγαλύτερος ή ίσος με τον δεύτερο [ int1 gt int2 ] Ο πρώτος ακέραιος είναι μεγαλύτερος από τον δεύτερο [ int1 le int2 ] Ο πρώτος ακέραιος είναι μικρότερος ή ίσος με τον δεύτερο [ int1 lt int2 ] Ο πρώτος ακέραιος είναι μικρότερος από τον δεύτερο 4. Λογικοί τελεστές. Προσοχή και εδώ στα κενά! condition Άρνηση συνθήκης. Λογικός Τελεστής NOT Condition1 a condition2 Λογικός τελεστής ΚΑΙ (AND). Επιστρέφεται αληθής τιμή όταν ΚΑΙ οι δυο συνθήκες είναι αληθείς. Condition1 o condition2 Λογικός τελεστής Ή (OR). Επιστρέφεται αληθής τιμή όταν τουλάχιστον μια συνθήκη είναι αληθής. \( group \) Ειδικές παρενθέσεις που χρησιμοποιούνται για ομαδοποίηση συνθηκών. (escaped parentheses) Παραδείγματα: if [ $3 = Monday ] Εξετάζει αν η τρίτη παράμετρος είναι το string Monday. Αν αυτό συμβαίνει είναι αληθής if [ -s /etc/passwd ] Εξετάζει αν το αρχείο /etc/passwd έχει κάτι μέσα γραμμένο και δεν είναι άδειο. Αν συμβαίνει αυτό τότε η συνθήκη είναι αληθής. Η εκτέλεση της εντολής δείχνει ταυτόχρονα ότι το αρχείο υπάρχει αλλά δεν μας λέει τι είναι. Θα μπορούσε πχ να είναι κατάλογος if [! -d /etc/group ] Εξετάζει αν το αρχείο /etc/group είναι κατάλογος. Με την άρνηση της συνθήκης η test είναι αληθής όταν το αρχείο ΔΕΝ είναι κατάλογος. (Πράγμα που συμβαίνει γιατί το αρχείο /etc/group είναι κανονικό αρχείο) if [ -u /bin/passwd ] Εξετάζει αν το αρχείο /bin/passwd έχει δικαίωμα SUID πράγμα που συμβαίνει οπότε η συνθήκη είναι αληθής και η test επιστρέφει 0. (κωδικός σωστής εκτέλεσης) if [ $? eq 0 ] Εξετάζει αν εκτελέστηκε σωστά η προηγούμενη εντολή. Αν όντως εκτελέστηκε σωστά η συνθήκη είναι αληθής. 14

if [ $? eq 1 ] Εξετάζει αν εκτελέστηκε λάθος η τελευταία εντολή. if [ \( $? eq 0 \) a \( $? eq 1 \) ] Για να είναι αληθής αυτή η συνθήκη πρέπει ταυτόχρονα η τελευταία εντολή να εκτελέστηκε ΚΑΙ σωστά ΚΑΙ λάθος, πράγμα αδύνατον οπότε η συνθήκη είναι ΠΑΝΤΑ ψευδής if [ \( $? eq 0 \) o \( $? eq 1 \) ] Για να είναι αληθής αυτή η συνθήκη πρέπει η τελευταία εντολή να έδωσε κωδικό σωστής εκτέλεσης 0 ή λάθος εκτέλεσης 1. Αληθής ΠΑΝΤΑ σχεδόν για όλες τις εντολές. Εξαιρούνται μόνο ορισμένες που επιστρέφουν και άλλους κωδικούς σφάλματος όπως πχ η expr if [ $# -gt 5 ] Εξετάζει αν ο αριθμός παραμέτρων είναι μεγαλύτερος του 5 if [ -f /etc/printcap ] Εξετάζει αν το αρχείο /etc/printcap είναι κανονικό αρχείο και υπάρχει. while Η εντολή while χρησιμοποιείτε όπως σε όλες τις γλώσσες για την εκτέλεση ενός κύκλου εντολών κάτω από κάποια συνθήκη. (Conditional loop). Η σύνταξή της είναι ως εξής: while <συνθήκη>;do <εντολές> done Θυμίζουμε ότι στην θέση της συνθήκης μπαίνει κάποια εντολή. (Συνήθως η εντολή test) Ο βρόχος while εκτελείτε όσο η συνθήκη είναι αληθής. Όσο δηλαδή η εντολή που παίζει το ρόλο της συνθήκης επιστρέφει κωδικό σωστής εκτέλεσης (κωδικός 0). until Παρόμοια με τον βρόχο while. Η until όμως εκτελείται όσο η συνθήκη είναι ψευδής. Μόλις η συνθήκη γίνει αληθής σταματάει η εκτέλεση του βρόχου. Η σύνταξή της είναι: until <συνθήκη>;do <εντολές> done expr Η εντολή expr χρησιμοποιείτε για να υπολογίζει αριθμητικές εκφράσεις ακεραίων. Ως γνωστό το κέλυφος του UNIX δεν αναγνωρίζει αριθμούς, οπότε τον ρόλο αυτό τον αναλαμβάνει η expr. Παραδείγματα: i=`expr $i +1` Προσθέτει το 1 στο i και βάζει το αποτέλεσμα ξανά στο i. var=`expr $var 5` Αφαιρεί το 5 από το var και βάζει το αποτέλεσμα ξανά στο var 15

var1=`expr $var \* 3` Πολλαπλασιάζει το var με το 3 και βάζει το αποτέλεσμα στο var1 var2=`expr $var \/ 4` Διαιρεί το var με το 4 και βάζει το αποτέλεσμα στο var2 Προσοχή όλη η έκφραση περικλείεται σε ανάποδα εισαγωγικά (`) που σημαίνουν ότι η εντολή εκτελείται. Η χρήση του \ πριν από το * και το / είναι αναγκαία γιατί αυτά τα σύμβολα για το κέλυφος είναι μεταχαρακτήρες. Παράδειγμα expr σε while loop. i=1 while [ $i lt 100 ];do echo $i i=`expr $i + 1` done Η χρήση του i είναι για μετρητής εκτελέσεων του βρόχου. H expr επιστρέφει κωδικό εκτέλεσης μεγαλύτερο ή ίσο του 2 όταν προσπαθούμε να κάνουμε πράξεις με μεταβλητές που ΔΕΝ είναι αριθμοί. Άσκηση test1 Κάντε ένα πρόγραμμα σεναρίου κελύφους (script) με μια παράμετρο που να δημιουργεί ένα αρχείο με όνομα την παράμετρο. Αν δοθεί χωρίς παράμετρο να δημιουργεί το myfile.txt. Για περισσότερες από μια παραμέτρους να βγαίνει μήνυμα λάθους. Αν το αρχείο με όνομα την παράμετρο υπάρχει να κάνει έλεγχο επικάλυψης (overwrite) να μας ρωτάει τι να κάνουμε και να κάνει ότι του πούμε. Λύση: if [ $# -gt 1 ];then echo usage: test1 parameter elif [ $# -eq 0 ]; then touch myfile.txt else if [ -f $1 ];then echo file $1 exists. Overwrite? Yy/Nn read answer if [ \( $answer!= y \) a \( $answer!= Y \) ];then echo file NOT overwritten else >$1 echo file $1 overwritten fi else touch $1 echo file $1 created fi fi 16

Ασκήσεις 1. Δημιουργείστε ένα ψευδώνυμο το οποίο να εμφανίζει το history, με αντίστροφη σειρά εκτέλεσης. 2. Στην άσκηση αυτή θα δημιουργήσετε νέα ψευδώνυμα και θα τα αποθηκεύσετε ώστε να μπορείτε να τα χρησιμοποιήσετε ξανά. Φτιάξτε ένα ψευδώνυμο της εντολής clear που θα έχει το όνομα c. Ελέγξτε ότι φτιάξατε το ψευδώνυμο και εκτελέστε το. Τώρα θα φτιάξετε ένα ακόμη ψευδώνυμο, με όνομα lr. Το ψευδώνυμο lr, θα εκτελεί την εντολή ls με τις ακόλουθες επιλογές. (α) Το ψευδώνυμο θα εμφανίζει τη «μακρυά» μορφή της εντολής ls (long listing) (β) To ψευδώνυμο θα δείχνει και τα κρυφά αρχεία (γ) Θα εμφανίζει δείκτη (indicator) για το είδος του αρχείου, δίπλα στο όνομα κάθε αρχείου (δ) Θα εμφανίζει τα αποτελέσματα, ταξινομημένα κατά το χρόνο τελευταίας τροποποίησής τους (modification time) (ε) Τα αποτελέσματα θα ταξινομούνται με αντίστροφη σειρά Θα χρειαστεί να συμβουλευτείτε την εντολή man για την εντολή ls. Τα ψευδώνυμα που έχετε φτιάξει, δεν θα ισχύουν αν βγείτε από το σύστημά σας. Θα χρειαστεί να τα αποθηκεύσετε, προκειμένου να είναι διαθέσιμα στο μέλλον. Ανοίξτε το αρχείο ~/.bashrc και κάτω από τη γραμμή: #User specific aliases and functions προσθέστε τα δύο ψευδώνυμα που φτιάξατε. Βγείτε από το σύστημά σας και μπείτε ξανά. Δοκιμάστε τα ψευδώνυμα που αποθηκεύσατε. 3. Στην άσκηση αυτή θα αλλάξετε την προτροπή εντολών σας (prompt). Αν χρειαστεί συμβουλευτείτε τη σελίδα bash του man (ψάξτε για τη συμβολοσειρά PROMPTING). Σε ένα τερματικό, δείτε την τιμή της προτροπής εντολών. (α) Αλλάξτε την προτροπή σε "UBUNTU -> ". Προσέξτε να προσθέσετε ένα κενό χαρακτήρα μετά το > ώστε να ξεχωρίζουν οι εντολές από την προτροπή. (β) Τώρα να αλλάξετε την προτροπή ώστε να δείχνει το όνομα του συστήματός σας (hostname) και το χαρακτήρα $. (γ) Αλλάξτε την προτροπή εντολών ώστε να δείχνει και τον αύξοντα αριθμό εντολής από το ιστορικό. (δ) Αλλάξτε την προτροπή εντολών ώστε να δείχνει και το πλήρες μονοπάτι του τρέχοντα καταλόγου εργασίας, ανάμεσα στο όνομα συστήματος και την αρίθμηση των εντολών. Να εμφανίζει το χαρακτήρα : (στ) Τώρα ανοίξτε το αρχείο ~/.bashrc και αποθηκεύστε την τελευταία μορφή της προτροπής. Αφού αποθηκεύσετε το αρχείο, ανοίξτε ένα νέο τερματικό για να ελέγξετε ότι η προτροπή σας είναι όντως η επιθυμητή. 17

4. Όταν μία εντολή περιέχει μία άλλη εντολή περιεχόμενη σε backquotes (` `), ο φλοιός εκτελεί πρώτα την εντολή που βρίσκεται μέσα στα (` `) και το αποτέλεσμα αντικαθιστάται πριν την εκτέλεση της πρώτης εντολής. Χρησιμοποιήστε αυτή τη δυνατότητα για να εκτελέσετε την εντολή ls l για το πλήρες όνομα του αρχείου που εκτελείται όταν τρέχετε gzip. 18