ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I Πιτροπάκης Νικόλαος Υποψήφιος Διδάκτορας Contact: npitrop@unipi.gr Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: nifantop@unipi.gr
If at first you don't succeed, call it version 1.0
ΔΕΣΜΕΥΜΕΝΑ ΟΝΟΜΑΤΑ Υπάρχουν ορισμένες μεταβλητές, οι οποίες έχουν πληροφορίες για τη λειτουργία ορισμένων προγραμμάτων με άμεση συνέπεια, να μην μπορούν να χρησιμοποιηθούν από εμάς. Κάποιες από αυτές είναι: USER Το όνομα του χρήστη HOME Το home directory του χρήστη SHELL Το κέλυφος που χρησιμοποιεί JAVA Η διαδρομή που έχει εγκατασταθεί η java RANDOM Γεννήτρια τυχαίων αριθμών Προκειμένου να πάρουμε την τιμή των μεταβλητών αυτών τις χρησιμοποιούμε όπως και τις υπόλοιπες
ΔΗΜΙΟΥΡΓΙΑ SCRIPT Προκειμένου να εκτελέσουμε μία σειρά εντολών πρέπει να δημιουργήσουμε ένα αρχείο script το οποίο να τις περιέχει. Κάθε αρχείο script ξεκινάει με το όνομα του φλοιού που είναι γραμμένο, ώστε να διερμηνευτεί ανάλογα. Π.χ #!/bin/bash #!/bin/bourne Ποιο φλοιό χρησιμοποιεί το σύστημά μας? Hello world script #!/bin/bash echo hello world
ΕΙΔΙΚΕΣ ΜΕΤΑΒΛΗΤΕΣ Υπάρχουν κάποιες μεταβλητές οι οποίες είναι ειδικού σκοπού καθώς εκτελούν συγκεκριμένες εργασίες. Αυτές είναι: $0 Το όνομα του script $n Ο αριθμός των ορισμάτων του script. π.χ $1 το πρώτο, $2 το δεύτερο κτλ $# Ο αριθμός των ορισμάτων του script $@ Όλα τα ορίσματα του script $? Η κατάσταση εξόδου που επέστρεψε η τελευταία εντολή
ΕΙΣΟΔΟΣ ΤΙΜΩΝ Μάθαμε πώς να εμφανίζουμε τιμές μεταβλητών και μηνύματα. Πρέπει όμως να μπορούμε να εισάγουμε και δεδομένα. Για την εισαγωγή δεδομένων από το χρήστη χρησιμοποιούμε την εντολή read. Συντάσσεται read [επιλογές] όνομα μεταβλητής ή μεταβλητών Αν χρησιμοποιήσουμε την [-p] έχουμε τη δυνατότητα να εμφανίσουμε κείμενο, το οποίο θα προτρέψει για την καταχώρηση των τιμών. π.χ read p doste to onoma sas name echo $name αλλιώς με την πεπατημένη echo doste to onoma sas read name echo $name
ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (1/6) Προκαθορισμένη είσοδος είναι το stdin (πληκτρολόγιο) Προκαθορισμένη έξοδος είναι το stdout (οθόνη) Προκαθορισμένη έξοδος για διαγνωστικά μηνύματα είναι stderr (οθόνη) Για ορισμένες εντολές του Unix (π.χ cat, lpr, grep, wc, sort, head, tail κτλ) τα ορίσματα που είναι ονόματα αρχείων είναι προαιρετικά, υπό την έννοια ότι αν παραλείπονται, χρησιμοποιείται η προκαθορισμένη είσοδος (το τέλος του stdin δίνεται από το πληκτρολόγιο με το χαρακτήρα ^D) π.χ wc ^D
ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (2/6) wc: μετράει λέξεις wc [επιλογές] wc I: μετράει γραμμές wc m: μετράει χαρακτήρες wc file: δίνουμε όνομα αρχείου που θέλουμε να μετρήσουμε λέξεις Π.χ wc myfile.txt 7=γραμμές 6=λέξεις 40=χαρακτήρες
ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (3/6) Ανακατεύθυνση του stdin < Είσοδος από αρχείο και όχι από το πληκτρολόγιο Ανακατεύθυνση του stdout > Ανακατεύθυνση εξόδου σε αρχείο. Αν δεν υπάρχει το αρχείο δημιουργείται. Αν υπάρχει τότε αντικαθίσταται. Ανακατεύθυνση του stdout με προσάρτηση >> Ανακατεύθυνση εξόδου σε αρχείο. Το αρχείο αν δεν υπάρχει δημιουργείται. Αν υπάρχει, τα δεδομένα εισέρχονται μετά την τελευταία γραμμή.
ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (4/6) π.χ ls- la > list.txt Το αποτέλεσμα (έξοδος) της ls-la αποθηκεύεται στο αρχείο list.txt π.χ cat list.txt > nikos.txt Το αποτέλεσμα (έξοδος) της cat αποθηκεύεται στο αρχείο nikos.txt
ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (5/6) Αριθμός Όνομα Περιγραφή 0 stdin Standard input 1 stdout Standard output 2 stderr Standard error Το 1 μπορεί να παραλειφθεί, οπότε συνήθως δεν το γράφουμε. π.χ w > whoisonline.txt η εντολή αυτή είναι ίδια με w 1> whoisonline.txt Στην περίπτωση της ανακατεύθυνσης λάθους rm something.txt 2> error.log η εντολή αυτή είναι ίδια με rm /etc/something.txt &>error.log
ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (6/6) Παραδείγματα cat /etc/passwd >> log wc l /etc/resolv.conf >> servers Ποιο είναι το περιεχόμενο του αρχείου τεστ? cat /etc/passwd >> test.txt cat /etc/papersize >> test.txt whoami > test.txt Αν τα εκτελέσουμε με την αντίθετη φορά?
ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (1/7) Η σύνταξή της είναι: if [συνθήκη] then <εντολές> else <εντολές> fi π.χ x=50 y=40 if [ $x==$y ] then echo x and y are equal else echo x and y are not equal fi
ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (2/7) Είδαμε την απλή επιλογή. Όμως είναι δυνατόν να έχουμε και πολλαπλή επιλογή. Η σύνταξή της είναι: if [συνθήκη] then <εντολές> elif [συνθήκη] then <εντολές> else <εντολές> fi Το τελευταίο else μπορεί να παραληφθεί
ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (3/7) Σχεσιακοί τελεστές: -eq (equal) = -ne (not equal)!= -gt (greater than) > -lt (less than) < -ge (greater or equal) >= -le (lower or equal) <=
ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (4/7) Τελεστές ακολουθίας χαρακτήρων: == Ίσο, a==b!= Διάφορο, a!=b -z Έλεγχος αν είναι μηδενικού μήκους. Αν ναι επιστρέφει true -n Έλεγχος αν είναι μη μηδενικού μήκους. Αν ναι επιστρέφει true
ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (5/7) Λογικοί τελεστές : Ισχύει η συνθήκη a ή η συνθήκη b, π.χ if [συνθήκη a ] [συνθήκη b] && Ισχύει η συνθήκη a και η συνθήκη b, π.χ if [συνθήκη a ] && [συνθήκη b] -o ισχύει το a ή το b π.χ [ $a gt $b -o $a ne $b ] -a ισχύει το a και το b π.χ [ $a gt $b -a $c -gt $b ]
ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (6/7) Παραδείγματα x=1 y=2 if [ $x eq $y ] [ $x lt $y ] then echo x <= y else echo x > y fi x=2 y=3 if [ $x ne $y ] && [ $x lt $y ] then echo x < y else echo x > =y fi
ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (7/7) Παράδειγμα (πρόσβασης) valid_password=1234 echo Please enter your password read password if [ $password eq $valid_password ]; then echo You have Access!! else echo Access denied!! fi
root@oslab:~$ sudo shutdown h now