Το Shell scripting, ή σενάρια κελύφους είναι ο δρόμος στα ενδότερα κάθε Linux διανομής. Η καλή γνώση δημιουργίας αυτοματισμών, είναι σπουδαίο εργαλείο στην εκμάθηση του Linux αλλά και της διαχείρισης του λειτουργικού μας συστήματος. Στο παρόν άρθρο θα ξεκινήσουμε μια σειρά μαθημάτων, όπως αυτά έγιναν στο group του Telegram σχετικά με τον προγραμματισμό σε Bash.

Τι είναι το shell scripting;

Shell script είναι ένα απλό αρχείο κειμένου που περιέχει μια σειρά εντολών. Αυτές οι εντολές είναι ένα μείγμα εντολών που πληκτρολογούμε τυχαία στη γραμμή εντολών (όπως ls ή cp για παράδειγμα) και εντολές που μπορούμε να πληκτρολογήσουμε στη γραμμή εντολών.

Ένα σημαντικό σημείο που πρέπει να θυμόμαστε είναι:

Οτιδήποτε μπορείτε να τρέξετε κανονικά στη γραμμή εντολών μπορεί να εισαχθεί σε ένα script και να κάνει ακριβώς το ίδιο πράγμα. Ομοίως, οτιδήποτε μπορείτε να βάλετε σε ένα script μπορεί επίσης να τρέξει κανονικά στη γραμμή εντολών και θα κάνει ακριβώς το ίδιο πράγμα.

mathimata-bash-shell-scripting-programmatismos-linux

Δεν χρειάζεται να αλλάξετε τίποτα. Απλά πληκτρολογήστε τις εντολές κανονικά και θα συμπεριφερθούν κανονικά. Απλώς, αντί να τα πληκτρολογούμε στη γραμμή εντολών, τις εισάγουμε σε ένα αρχείο κειμένου όπως είδαμε και παλιότερα στο άρθρο «Φτιάξτε δικές σας εντολές για το τερματικό του Linux«. Αυτό λοιπόν το αρχείο με τους συνδυασμούς εντολών, αποτελεί ένα «αυτοματισμό» μιας διεργασίας.

Advertisements

Με αυτή την έννοια, αν ξέρετε πώς να κάνετε πράγματα στη γραμμή εντολών, τότε γνωρίζετε ήδη κατά κάποιο τρόπο τι εστί Shell scripting.

Το Linux είναι από τη φύση του ένα ΛΣ που δε στηρίζεται στις καταλήξεις των αρχείων για να δουλέψει, αλλά για δική μας ευκολία καλό είναι να δίνουμε μια κατάληξη στα αρχεία μας (αν το επιθυμούμε φυσικά). Είναι βολικό για εμάς να δίνουμε σε αρχεία που είναι Shell scripts μια κατάληξη .sh (myscript.sh για παράδειγμα). 

Τέλος, να υπενθυμίσουμε ότι λόγο της δημοφιλίας που έχει το κέλυφος BASH (όλες οι διανομές Linux το χρησιμοποιούν εξ’ορισμού), συνήθως τα scripts, αλλά και το shell scripting αναφέρεται ως bash scripting παρόλο που τα scripts αυτά τρέχουν χωρίς πρόβλημα και σε άλλα περιβάλλοντα όπως το zsh που έχουμε δει παλιότερα.

Το πρώτο μας script

Ανοίγουμε τον editor της επιλογής μας και γράφουμε μέσα σε αυτόν

#!/bin/bash
# Αυτό είναι ένα σχόλιο

echo "Καλησπέρα Κόσμε"

Σώζουμε το αρχείο μας ως hello.sh στον προσωπικό μας φάκελο και δίνουμε στο τερματικό μας

bash hello.sh

Εναλλακτικά μπορούμε να γράψουμε

sh hello.sh

Ανάλυση του script

Ας δούμε το πρώτο μας script, γραμμή προς γραμμή προκειμένου να καταλάβουμε τη λειτουργία του

#!/bin/bash

Αυτή γραμμή είναι το λεγόμενο shebang όπου δηλώνεται στην ουσία ότι έχουμε να κάνουμε με ένα bash script και τη διαδρομή του bash μέσω του οποίου θα εκτελεστεί.

# Αυτό είναι ένα σχόλιο

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

echo "Καλησπέρα Κόσμε"

Η τελευταία μας γραμμή είναι μια εντολή echo η οποία τυπώνει ένα κείμενο.

Εξελίσσοντας το script μας

Ας κάνουμε μια μικρή αλλαγή στο πρόγραμμα μας

#!/bin/bash
# Αυτό είναι ένα σχόλιο
onoma=$"τοονομασας"
echo "Καλησπέρα Κόσμε και $onoma"

Όπως βλέπουμε, ορίσαμε μια μεταβλητή onoma και της δώσαμε μια τιμή. Ο ορισμός μεταβλητής στο bash ειναι μια σχετικά εύκολη υπόθεση αλλά θέλει προσοχή ανάλογα με τον τύπο της μεταβλητής που θέλουμε να αποθηκεύσουμε.

Ας κάνουμε μια ακόμη αλλαγή στο πρόγραμμα μας

#!/bin/bash
# Αυτό είναι ένα σχόλιο
onoma=$"Bill"
simera=$(date "+%D")
echo "Καλησπέρα Κόσμε και $onoma, η ημερομηνία είναι $simera"

Όπως είδαμε με τον ορισμό 2 μεταβλητών πήραμε πολύ σημαντικές πληροφορίες για το όνομα μας και τη μέρα.

Στο bash scripting μπορούμε να καλούμε εξωτερικές εντολές και να παίρνουμε τα outputs και να τα επεξεργαζόμαστε κατά τις ανάγκες μας.

Hello.sh version 2.0

Ας κάνουμε μερικές ακόμα αλλαγές στο πρόγραμμα μας

#!/bin/bash
# Αυτό είναι ένα σχόλιο
read -rp "Ποιο είναι το όνομα σας; " onoma
simera=$(date "+%D")
echo "Καλησπέρα Κόσμε και $onoma, η ημερομηνία είναι $simera"

Με τις αλλαγές που κάναμε στο script, πλέον ορίζουμε εμείς τι τιμή θα παίρνει η μεταβλητή onoma και αυτό πραγματοποιείται με την αγαστή συνεργασία της read.

Είχα μια ενδιαφέρουσα ερώτηση κατά τη διεξαγωγή του μαθήματος.

ΕΡ. Που αποθηκεύει το όνομα; Φτιάχνει προσωρινό αρχείο ή στην μνήμη; Αν τρέξω δεύτερο script θα υπάρχει διαθέσιμο το περιεχόμενο της μεταβλητής onoma;

Τα bash scipts αποθηκεύουν τις τιμές των μεταβλητών σε περιοχές της μνήμης. Με το κλείσιμο του προγράμματος αδειάζει και η περιοχή και η μεταβλητή δεν θα υπάρχει.

Hello.sh version 3.0

Για τη συνέχεια μετατρέπουμε το πρόγραμμα μας σε εκτελέσιμο, εξαλείφοντας την ανάγκη να γράφουμε bash ή sh στην αρχή του, δίνοντας στο τερματικό μας

chmod +x hello.sh

και πλέον θα μπορούμε να τρέχουμε το script μας δίνοντας απλά

./hello.sh

Αμέσως μετά κάνουμε τις σχετικές αλλαγές στο πρόγραμμα μας, ούτως ώστε ο κώδικας να μοιάζει με τον ακόλουθο

#!/bin/bash
# Αυτό είναι ένα σχόλιο
read -rp "Ποιο είναι το όνομα σας; " onoma
simera=$(date "+%D")
VAR=$1
echo "Καλησπέρα $VAR και $onoma, η ημερομηνία είναι $simera"

Παρατηρούμε ότι εισήγαμε τη μεταβλητή VAR με την τιμή $1. Τι είναι αυτό το δολάριο; Το $1 είναι το πρώτο όρισμα μετά το όνομα του προγράμματος με $2 το δεύτερο κ.ο.κ.

Advertisements

Κοινώς η VAR παίρνει τιμή από τη γραμμή εντολών, ενώ η onoma μας ζητά να την ορίσουμε κατά την εκτέλεση του προγράμματος.

Με λίγα λόγια αν δώσουμε στο τερματικό μας

./hello.sh παλικάρι

θα πάρουμε ως output

Ποιο είναι το όνομα σας; Robot
Καλησπέρα παλικάρι και Robot, η ημερομηνία είναι 01/16/19

Τι μάθαμε;

Στο σημερινό μάθημα φτιάξαμε το πρώτο μας πρόγραμμα και είδαμε τις διαφορετικές μορφές με τις οποίες μπορούμε να εισάγουμε μεταβλητές και τιμές στο script μας. Επίσης μάθαμε πως δομείται ένα bash script.

Σε επόμενο μάθημα θα δούμε πως ελέγχουμε τη ροή του προγράμματος μας ανάλογα με τα αποτελέσματα που έχουμε.

Σας ενδιαφέρει το shell – bash scripting ή ο προγραμματισμός γενικότερα; Πείτε μας στα σχόλια τι μπορούμε να βελτιώσουμε ή τι θα θέλατε να δείτε σε επόμενα μαθήματα.

Όλα τα νέα αλλά και παλιότερα μαθήματα θα τα βρείτε στο λήμμα «μαθήματα shell scripting«