Το πρώτο μου scriptάκι



Στην εισαγωγή (δεν πιστεύω να μην την διαβάσατε !!) είδαμε πολύ περιληπτικά τι είναι ένα κέλυφος (shell), μερικά γνωστά shells και τονίσαμε ότι το βασικό κέλυφος του linux είναι το bash (bourne again shell). Αυτό είναι που θα μας απασχολήσει σ' αυτήν την σειρά (?) από tutorials.

Μπαίνω κατευθείαν στο ψητό.
Υπάρχουν δυο τρόποι εισαγωγής εντολών στο bash.
Ο πρώτος (και πιο γνωστός) είναι αυτός που δίνουμε μια εντολή κατευθείαν στην κονσόλα.
Έστω ότι θέλουμε να καθαρίσουμε την οθόνη, και μετά να μας γράφει στην κονσόλα τη φράση "Hello luckyb !!"
Τότε δεν έχουμε παρά να πληκτρολογήσουμε της κατωτέρω εντολές:

$ clear
$ echo "Hello luckyb !!"

Υπενθύμιση:
Το σήμα του δολλαρίου ($) σημαίνει ότι δίνουμε την εντολή ως απλός χρήστης και δεν το πληκτρολογούμε.
Αντίστοιχα αν δίναμε την εντολή ως root θα ξεχώριζε από το καγκελάκι (#).


Όσο απλή κι αν φαίνεται αυτή η διαδικασία (να καθαρίσουμε την οθόνη και να τυπώσουμε κάτι σ' αυτή) δεν παύει να είναι κάτι πολύ συγκεκριμένο και για να επιτευχθεί απαιτείται η πληκτρολόγηση δυο εντολών. Επίσης υπάρχει η πιθανότητα να θέλουμε να το εκτελούμε συχνά πυκνά (ή έστω μια στο τόσο).

Κι εδώ ερχόμαστε στον δεύτερο τρόπο εισαγωγής εντολών: Το shell script (αυτό είναι λίγο γενικό) ή bash script (αυτό είναι πιο συγκεκριμένο) ή για λόγους συντομίας script (αυτό κι αν είναι γενικό).

Ένα script είναι ένα αρχείο το οποίο περιλαμβάνει μια ακολουθία από εντολές. Συγκεκριμένα κάθε γραμμή του είναι και μια εντολή. Αυτές διαβάζονται και εκτελούνται μία μία. Δηλαδή πρώτα εκτελείται η πρώτη. Αφού τελειώσει, εκτελείται η δεύτερη, μετά η τρίτη κλπ μέχρι το τέλος, οπότε γυρνάμε πάλι στην κατάσταση του prompt όπου το σύστημα περιμένει να του δώσουμε μια νέα εντολή.

Σημαντικό (διακοπή scipt ανώ τρέχει):
Αν για οποιονδήποτε λόγο θέλουμε να διακόψουμε την ακολουθία εντολών που ακολουθείται τρέχοντας ένα script δεν έχουμε παρά να πατήσουμε τον συνδυασμό πλήκτρων ctrl+c.

Ιδιότητες ενός καλού scipt:
1. Πρέπει να τρέχει χωρίς σφάλματα (λογικό αυτό :-p)
2. Πρέπει να εκτελεί την διεργασία για την οποία προορίζεται.
3. Η λογική του προγράμματος (ναι, τα scripts μπορούν να θεωρηθούν προγράμματα ) πρέπει να είναι σαφώς ορισμένη και προφανής. Αυτό μπορεί να σας φαίνεται παράλογο όταν φτιάχνεται κάτι απλό. Όταν όμως γεμίσετε μερικές σελίδες από εντολές και δεν βγάζετε άκρη απ' το μπάχαλο μη μου φωνάζεται ότι δεν σας το' πα !!
4. Δεν πρέπει να κάνει διεργασίες οι οποίες δεν χρειάζονται.
5. Πρέπει να μπορεί να χρησιμοποιηθεί ξανά και ξανά.

Δομή ενός καλού scipt
Πριν αρχίσετε να γράφετε ένα script και πάρει φωτιά το πληκτρολόγιο αναρωτηθείτε τα ακόλουθα:
1. Θα χρειαστώ πληροφορίες από τον χρήστη ή από το περιβάλλον του χρήστη ;
2. Πως θ' αποθηκεύσω αυτές τις πληροφορίες ;
3. Θα χρειαστεί να δημιουργήσω κάποια αρχεία ;
4. Τι εντολές θα χρησιμοποιήσω ; Αν τρέξει το script σε άλλα συστήματα θα τρέχει ;
5. Ο χρήστης θα χρειαστεί να βλέπει κάποιες ειδοποιήσεις ή θα τον αφήσω στην άγνοια ;

Επί το έργον:

1. Δημιουργία ενός απλού αρχείου κειμένου (text file)

Το πρώτο που πρέπει να κάνουμε είναι να δημιουργήσουμε ένα απλό αρχείο κειμένου.
Θα του δώσουμε ένα όνομα και μέσα θα γράψουμε την ακολουθία των εντολών που θέλουμε να εκτελούνται όταν τρέχουμε το script.

Ανοίγουμε λοιπόν τον διαχειριστή αρχείων (konqueror, dolphin, nautilus) στο home directory μας, δημιουργούμε έναν νέο υποκατάλογο με τ' όνομα "MyScripts" (δεξί κλικ -> create new -> folder -> myScripts) και μπαίνουμε μέσα σ'αυτόν. Στο subfolder "myScripts" θα σώζουμε ότι scriptάκια φτιάχνουμε μόνοι μας. Φυσικά και μπορείτε να τον ονομάσετε όπως θέλετε και να τον δημιουργήσετε όπου θέλετε.
Αλλιώς:

$ mkdir ~/myScripts
$ cd myScripts

Κάνουμε πάλι δεξί κλικ μέσα στον διαχειριστή αρχείων και αυτή τη φορά επιλέγουμε "Create New -> Text File". Στο παράθυράκι που θα εμφανιστεί δίνουμε το όνομα του αρχείου: "hello.sh" και κατόπιν το ανοίγουμε μ' έναν text editor (Kwrite, kate, kedit, gedit κλπ). Ένα απλό κλικ επάνω στο εικονίδιο συνήθως αρκεί, αλλά μην το προτιμήσετε. Όταν μετά το κάνουμε εκτελέσιμο με αριστερό κλικ θ' αρχίσει να τρέχει και δεν θ'ανοίξει για επεξεργασία. Συνηθίστε να κάνετε δεξί κλικ επάνω στο εικονίδιο και πχ "Open with -> Kwrite".
Αλλιώς:


luckyb@siduxbox:~/myscripts$ nano hello.sh
(έτσι ανοίγει ο επεξεργαστής κειμένου nano και δημιουργεί το αρχείο που θέλουμε)


2. Πληκτρολόγηση όλων των εντολών που θέλουμε να εκτελούνται.

Όμορφα.
Δημιουργήσαμε το αρχείο μας και είναι ανοιχτό για επεξεργασία !!

Πληκτρολογούμε τις κατωτέρω γραμμές μέσα στον editor:

#! /bin/bash
 
# filename        : hello.sh
# Date of creation        : 15 July 2008
# Date of last modification    : 15 July 2008
# Creator            : luckyb
# modified by        : luckyb on 15 July 2008
 
# This is my first script
# It clears the screen end outputs the sentence "Hello luckyb" on the screen
# Pretty cool !!
 
# clear the screen
clear
 
# Say what I want to say :-)
echo "Hello luckyb"


Σώνουμε το αρχείο και κλείνουμε τον editor.
Αν χρησιμοποιήσαμε nano τότε πατάμε "ctrl+x", απαντάμε με "y" (δηλ. yes θέλω να το σώσω) και "enter" για να το σώσει ως "hello.sh".

Επεξήγηση:
Στην πρώτη γραμμή (#!/bin/bash) δηλώνουμε το ποιό shell θα χρησιμοποιήσουμε (διαβάστε την εισαγωγή επιτέλους !!). Στην προκειμένη περίπτωση το "bash".

Οι επόμενες γραμμές παρατηρούμε ξεκινούν με το σύμβολο "#".
Αυτές είναι δικά μας σχόλια. Δεν αποτελούν εντολές που θα εκτελεστούν, αλλά λεγόμενα που μας βοηθούν στην κατανόηση του script. Έτσι ξεκινάμε γράφοντας μια "επικεφαλίδα", αναφέροντας το όνομα του αρχείου, το πότε δημιουργήθηκε, το πότε τροποποιήθηκε τελευταία φορά (αν τροποποιήθηκε), τον δημιουργό, αυτούς που το τροποποίησαν (αν υπήρξαν) και τέλος λίγα λόγια για το τι κάνει.
Μη σας φαίνεται αγγαρεία. Συνηθίστε να βάζετε τέτοιου είδους επικεφαλίδες. Θα διαπιστώσετε την χρησιμότητα τους γράφοντας πιο πολύπλοκα πράγματα ή όταν τροποποιήσουν πολλοί το αρχείο.

Επίσης συνηθίστε να γράφετε άλλα σχόλια ενδιάμεσα στις εντολές που εκτελούνται. Δεν είπαμε να γράφετε κάτι σε κάθε εντολή (όπως τώρα), αλλά τα απαραίτητα. Φανταστείτε τα απαραίτητα ως χρήσιμα για κάποιον που ανοίγει το αρχείο για πρώτη φορά ή για εσάς όταν το ανοίξετε μετά από πολύ καιρό που δεν πρόκειται να θυμάστε τίποτα. Πρέπει από τα σχόλια οι ανωτέρω κατηγορίες χρηστών, να αποκτούν μια ξεκάθαρη άποψη για το τι γίνεται μέσα στο script και τι κάνει το κάθε κομμάτι του κώδικα.

Τέλος στις επόμενες γραμμές συναντάμε τις εντολές που θα εκτελεστούν. Αυτές είναι με σειρά:
α. clear
β. echo "Hello luckyb"

Σχδόν έτοιμοι να το τρέξουμε.

3. Αλλαγή των ιδιοτήτων του "hello.sh" σε εκτελέσιμο.

Αν κι έχουμε δημιουργήσει μεν, το text αρχείο μας και του έχουμε περάσει μέσα τις εντολές πρέπει να το κάνουμε εκτελέσιμο για να μπορούμε να το τρέχουμε.
Μέσα απ' τον υποκατάλογο ~/myScripts (To "~" δεν είναι τίποτ' άλλο από το home του χρήστη που δουλεύει αυτή τη στιγμή) δώστε την εντολή:


luckyb@siduxbox:~/myscripts$ chmod u+x hello.sh

Δηλαδή άλλαξε τις ιδιότητες του αρχείου "hello.sh". Για τον χρήστη,(u) πρόσθεσε (+) την ιδιότητα "εκτελέσιμο" (x)

Πιθανόν αυτή τη διαδικασία να χρειαστεί να την επαναλαμβάνουμε κάθε φορά που τροποποιούμε το αρχείο (εξαρτάται από τον editor που χρησιμοποιούμε)

Είμαστε έτοιμοι να το τρέξουμε !!!

4. Εκτέλεση του script.

Πάλι από τον υποκατάλογο που έχουμε το αρχείο μας δίνουμε την εντολή:


luckyb@siduxbox:~/myscripts$ ./hello.sh

ταραταραταΤΑΑΑΑΑΑΑΑΑ
η οθόνη ως δια μαγείας καθαρίζει και γράφεται το μήνυμα μας !!

Βασικά θα μπορούσαμε να δώσουμε ένα σκέτο "hello.sh" αλλά συνηθίστε (ναι κι αυτό) να βάζετε μπροστά το "./" το οποίο σημαίνει τρέξε το hello.sh που βρίσκεται στον τρέχον υποκατάλογο. Τώρα θα μου πείτε υπάρχει κι άλλο ?? Ποτέ δεν ξέρεις τι μπορεί να βρίσκεται μέσα σε κάτι άλλους ύποπτους υποκαταλόγους όπως /bin ή /usr/bin

Αν θέλετε να τρέχει το scipt απ' όπου κι αν βρίσκεστε, τότε αντιγράψτε το στον υποκατάλογο bin στο home σας (αν δεν υπάρχει δημιουργήστε τον. Έτσι όπου κι αν είστε δίνετε ένα σκέτο "hello.sh" και γίνεται δουλειά.


Πολλά συγχαρητήρια !!
Μόλις δημιουργήσατε το πρώτο σας bash script.
Μπορεί να μην είναι και ιδιαίτερα χρήσιμο, αλλά μάθατε πολλές βασικές αρχές.
Πειραματιστείτε κατά βούληση και φτιάξτε απλά σκριπτάκια. Όριο η φαντασία του καθενός για τις εντολές που θα χρησιμοποιήσει.

Θα επανέλθω με άλλα χρήσιμα κολπάκια. Πάρτε μια ιδέα επιγραμματικά:
Συνθήκες (ώστε να εκτελείται κάτι μόνο εφόσον ισχύουν συγκεκριμένες συνθήκες)
loop (επανάληψη τμήματος του κώδικα όσες φορές θέλουμε)
Συναρτήσεις (χεχε)
Μεταβλητές (χαχα)
Αυτοματοποίηση με cron (Αυτό δεν το' χω δοκιμάσει ποτέ, αλλά για σας κάτι θα κάνω)

Υ.Γ: Το συγκεκριμένο κείμενο γράφτηκε στο όμορφο νησί της Ρόδου γι' αυτό παρακαλώ να είστε επιεικείς.



Πίνακας περιεχομένων
Προηγούμενο (Εισαγωγικά)
Επόμενο (Μεταβλητές, ειδικοί χαρακτήρες ...κι άλλα περίεργα)