Linux Professional Institute Learning Logo.
Mετάβαση στο κύριο περιεχόμενο
  • Αρχική
    • Διαθέσιμοι Πόροι
    • Μαθησιακά Υλικά LPI
    • Γίνε Συνεργάτης
    • Συνεργάτες Εκδόσεων
    • Γίνε Συνεργάτης Εκδόσεων
    • Σχετικά
    • FAQ
    • Συνεργάτες
    • Roadmap
    • Επικοινωνία
  • LPI.org
3.3 Μάθημα 1
Θέμα 1: Η κοινότητα Linux και μια καριέρα στον Ανοιχτό Κώδικα
1.1 Εξέλιξη του Linux και Δημοφιλή Λειτουργικά Συστήματα
  • 1.1 Μάθημα 1
1.2 Κύριες Εφαρμογές Ανοιχτού Κώδικα
  • 1.2 Μάθημα 1
1.3 Λογισμικό Ανοιχτού Κώδικα και Αδειοδότηση
  • 1.3 Μάθημα 1
1.4 Δεξιότητες ICT και Εργασία στο Linux
  • 1.4 Μάθημα 1
Θέμα 2: Βρίσκοντας το Δρόμο σας σε ένα Σύστημα Linux
2.1 Βασικά Στοιχεία Γραμμής Εντολών
  • 2.1 Μάθημα 1
  • 2.1 Μάθημα 2
2.2 Χρήση της Γραμμής Εντολών για Λήψη Βοήθειας
  • 2.2 Μάθημα 1
2.3 Χρήση Καταλόγων και Παράθεση Αρχείων
  • 2.3 Μάθημα 1
  • 2.3 Μάθημα 2
2.4 Δημιουργία, Μετακίνηση και Διαγραφή Αρχείων
  • 2.4 Μάθημα 1
Θέμα 3: Η Δύναμη της Γραμμής Εντολών
3.1 Αρχειοθέτηση Αρχείων στη Γραμμή Εντολών
  • 3.1 Μάθημα 1
3.2 Αναζήτηση και Εξαγωγή Δεδομένων από Αρχεία
  • 3.2 Μάθημα 1
  • 3.2 Μάθημα 2
3.3 Μετατροπή Εντολών σε Σενάριο
  • 3.3 Μάθημα 1
  • 3.3 Μάθημα 2
Θέμα 4: Το Λειτουργικό Σύστημα Linux
4.1 Επιλογή Λειτουργικού Συστήματος
  • 4.1 Μάθημα 1
4.2 Κατανόηση του Υλικού του Υπολογιστή
  • 4.2 Μάθημα 1
4.3 Πού Αποθηκεύονται τα Δεδομένα
  • 4.3 Μάθημα 1
  • 4.3 Μάθημα 2
4.4 Ο Υπολογιστής σας στο Δίκτυο
  • 4.4 Μάθημα 1
Θέμα 5: Ασφάλεια και Δικαιώματα Αρχείων
5.1 Βασική Ασφάλεια και Αναγνώριση Τύπων Χρηστών
  • 5.1 Μάθημα 1
5.2 Δημιουργία Χρηστών και Ομάδων
  • 5.2 Μάθημα 1
5.3 Διαχείριση Δικαιωμάτων και Ιδιοκτησίας Αρχείων
  • 5.3 Μάθημα 1
5.4 Ειδικοί Κατάλογοι και Αρχεία
  • 5.4 Μάθημα 1
How to get certified
  1. Θέμα 3: Η Δύναμη της Γραμμής Εντολών
  2. 3.3 Μετατροπή Εντολών σε Σενάριο
  3. 3.3 Μάθημα 1

3.3 Μάθημα 1

Πιστοποιητικό:

Linux Essentials

Έκδοση:

1.6

Θέμα:

3 Η Δύναμη της Γραμμής Εντολών

Σκοπός:

3.3 Μετατροπή Εντολών σε Script

Μάθημα:

1 απο 2

Εισαγωγή

Έχουμε μάθει να εκτελούμε εντολές από το shell μέχρι στιγμής, αλλά μπορούμε επίσης να εισάγουμε εντολές σε ένα αρχείο και στη συνέχεια να ορίσουμε αυτό το αρχείο να είναι εκτελέσιμο. Όταν εκτελείται το αρχείο, αυτές οι εντολές εκτελούνται η μία μετά την άλλη. Αυτά τα εκτελέσιμα αρχεία ονομάζονται scripts και είναι ένα απολύτως κρίσιμο εργαλείο για κάθε διαχειριστή συστήματος Linux. Ουσιαστικά, μπορούμε να θεωρήσουμε ότι το Bash είναι γλώσσα προγραμματισμού αλλά και shell.

Εκτύπωση Εξόδου

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

$ echo "Hello World!"
Hello World!

Τώρα, θα χρησιμοποιήσουμε την ανακατεύθυνση αρχείου για να στείλουμε αυτήν την εντολή σε ένα νέο αρχείο που ονομάζεται new_script.

$ echo 'echo "Hello World!"' > new_script
$ cat new_script
echo "Hello World!"

Το αρχείο new_script περιέχει τώρα την ίδια εντολή με πριν.

Κάνοντας ένα Script Εκτελέσιμο

Ας δείξουμε μερικά από τα βήματα που απαιτούνται για να εκτελεστεί αυτό το αρχείο με τον τρόπο που περιμένουμε. Η πρώτη σκέψη ενός χρήστη μπορεί να είναι να πληκτρολογήσει απλώς το όνομα του script, με τον τρόπο που μπορεί να πληκτρολογήσει το όνομα οποιασδήποτε άλλης εντολής:

$ new_script
/bin/bash: new_script: command not found

Μπορούμε να υποθέσουμε με ασφάλεια ότι το new_script υπάρχει στην τρέχουσα τοποθεσία μας, αλλά παρατηρήστε ότι το μήνυμα σφάλματος δεν μας λέει ότι το αρχείο δεν υπάρχει, αλλά μας λέει ότι η εντολή δεν υπάρχει. Θα ήταν χρήσιμο να συζητήσουμε πώς το Linux χειρίζεται εντολές και εκτελέσιμα αρχεία.

Εντολές και PATH

Όταν πληκτρολογούμε την εντολή ls στο shell, για παράδειγμα, εκτελούμε ένα αρχείο που ονομάζεται ls που υπάρχει στο σύστημα αρχείων μας. Μπορείτε να το αποδείξετε χρησιμοποιώντας το which:

$ which ls
/bin/ls

Θα γινόταν γρήγορα κουραστικό να πληκτρολογούμε το απόλυτο path του ls κάθε φορά που θέλουμε να κοιτάξουμε τα περιεχόμενα ενός καταλόγου, έτσι το Bash έχει μια μεταβλητή περιβάλλοντος που περιέχει όλους τους καταλόγους στους οποίους μπορεί να βρούμε τις εντολές που θέλουμε να εκτελέσουμε. Μπορείτε να δείτε τα περιεχόμενα αυτής της μεταβλητής χρησιμοποιώντας το echo.

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Κάθε μία από αυτές τις τοποθεσίες είναι όπου το shell αναμένει να βρει μια εντολή, οριοθετημένη με άνω και κάτω τελεία (:). Θα παρατηρήσετε ότι το /bin είναι παρόν, αλλά είναι ασφαλές να υποθέσουμε ότι η τρέχουσα τοποθεσία μας δεν είναι. Το shell θα αναζητήσει το new_script σε κάθε έναν από αυτούς τους καταλόγους, αλλά δεν θα το βρει και επομένως θα πετάξει το σφάλμα που είδαμε παραπάνω.

Υπάρχουν τρεις λύσεις σε αυτό το ζήτημα: μπορούμε να μετακινήσουμε το new_script σε έναν από τους καταλόγους του PATH, μπορούμε να προσθέσουμε τον τρέχοντα κατάλογο στο PATH ή μπορούμε να αλλάξουμε τον τρόπο που προσπαθούμε να καλέσουμε το script. Η τελευταία λύση είναι η πιο εύκολη, απαιτεί απλώς να καθορίσουμε την τρέχουσα τοποθεσία όταν καλούμε το script χρησιμοποιώντας μια περίοδο μαζί με μια κάθετο (./).

$ ./new_script
/bin/bash: ./new_script: Permission denied

Το μήνυμα σφάλματος έχει αλλάξει, γεγονός που υποδεικνύει ότι έχουμε σημειώσει κάποια πρόοδο.

Δικαίωματα Εκτέλεσης

Η πρώτη έρευνα που πρέπει να κάνει ένας χρήστης σε αυτήν την περίπτωση είναι να χρησιμοποιήσει το ls -l για να δει το αρχείο:

$ ls -l new_script
-rw-rw-r-- 1 user user 20 Apr 30 12:12 new_script

Μπορούμε να δούμε ότι τα δικαιώματα για αυτό το αρχείο έχουν οριστεί σε 664 από προεπιλογή. Δεν έχουμε ορίσει ακόμα αυτό το αρχείο να έχει δικαιώματα εκτέλεσης.

$ chmod +x new_script
$ ls -l new_script
-rwxrwxr-x 1 user user 20 Apr 30 12:12 new_script

Αυτή η εντολή έχει δώσει δικαιώματα εκτέλεσης σε όλους τους χρήστες. Λάβετε υπόψη ότι αυτό μπορεί να αποτελεί κίνδυνο για την ασφάλεια, αλλά προς το παρόν αυτό είναι ένα αποδεκτό επίπεδο δικαιώματος.

$ ./new_script
Hello World!

Είμαστε πλέον σε θέση να εκτελέσουμε το σενάριό μας.

Ορισμός του Interpreter

Όπως δείξαμε, μπορέσαμε απλώς να εισάγουμε κείμενο σε ένα αρχείο, να το ορίσουμε ως εκτελέσιμο και να το τρέξουμε. Το new_script παραμένει λειτουργικά ένα κανονικό αρχείο κειμένου, αλλά καταφέραμε να το ερμηνεύσει το Bash. Τι γίνεται όμως αν είναι γραμμένο σε Perl ή Python;

Είναι πολύ καλή πρακτική να προσδιορίζουμε τον τύπο του interpreter που θέλουμε να χρησιμοποιήσουμε στην πρώτη γραμμή ενός script. Αυτή η γραμμή ονομάζεται bang line ή συνηθέστερα shebang. Υποδεικνύει στο σύστημα πώς θέλουμε να εκτελεστεί αυτό το αρχείο. Εφόσον μαθαίνουμε Bash, θα χρησιμοποιήσουμε το απόλυτο path του εκτελέσιμου για το Bash, χρησιμοποιώντας ξανά το which:

$ which bash
/bin/bash

Η shebang μας ξεκινά με δίεση και θαυμαστικό, ακολουθούμενο από το απόλυτο path παραπάνω. Ας ανοίξουμε το new_script σε ένα πρόγραμμα επεξεργασίας κειμένου και ας εισάγουμε το shebang. Ας εκμεταλλευτούμε επίσης την ευκαιρία για να εισαγάγουμε ένα σχόλιο στο σενάριό μας. Τα σχόλια αγνοούνται από τον interpreter. Έχουν γραφτεί προς όφελος άλλων χρηστών που επιθυμούν να κατανοήσουν το σενάριό σας.

#!/bin/bash

# This is our first comment. It is also good practice to document all scripts.

echo "Hello World!"

Θα κάνουμε μια επιπλέον αλλαγή στο όνομα του αρχείου επίσης: θα αποθηκεύσουμε αυτό το αρχείο ως new_script.sh. Το suffix αρχείου ".sh" δεν αλλάζει την εκτέλεση του αρχείου με κανέναν τρόπο. Είναι μια σύμβαση τα bash scripts να επισημαίνονται με .sh ή .bash για να τα αναγνωρίζουν πιο εύκολα, με τον ίδιο τρόπο που τα Python scripts συνήθως προσδιορίζονται με το suffix .py.

Κοινοί Επεξεργαστές Κειμένου

Οι χρήστες Linux συχνά πρέπει να εργάζονται σε περιβάλλον όπου δεν είναι διαθέσιμοι οι γραφικοί επεξεργαστές κειμένου. Επομένως, συνιστάται ιδιαίτερα να αναπτύξετε τουλάχιστον κάποια εξοικείωση με την επεξεργασία αρχείων κειμένου από τη γραμμή εντολών. Δύο από τους πιο συνηθισμένους επεξεργαστές κειμένου είναι το vi και το nano.

vi

Το vi είναι ένα αξιοσέβαστο πρόγραμμα επεξεργασίας κειμένου και είναι εγκατεστημένο από προεπιλογή σχεδόν σε κάθε υπάρχον σύστημα Linux. Το vi δημιούργησε έναν κλώνο που ονομάζεται vi IMproved ή vim που προσθέτει κάποια λειτουργικότητα αλλά διατηρεί τη διεπαφή του vi. Ενώ η εργασία με το vi είναι αποθαρρυντική για έναν νέο χρήστη, ο επεξεργαστής είναι δημοφιλής και αγαπητός στους χρήστες που μαθαίνουν τις πολλές δυνατότητες του.

Η πιο σημαντική διαφορά μεταξύ του vi και εφαρμογών όπως το Notepad είναι ότι το vi έχει τρεις διαφορετικούς τρόπους λειτουργίας. Κατά την εκκίνηση, τα πλήκτρα H, J, K και L χρησιμοποιούνται για πλοήγηση και όχι για πληκτρολόγηση. Σε αυτήν την λειτουργία πλοήγησης, μπορείτε να πατήσετε I για να εισέλθετε στη λειτουργία εισαγωγής. Σε αυτό το σημείο, μπορείτε να πληκτρολογήσετε κανονικά. Για έξοδο από την λειτουργία εισαγωγής, πατάτε Esc για να επιστρέψετε στη λειτουργία πλοήγησης. Από τη λειτουργία πλοήγησης, μπορείτε να πατήσετε : για να μπείτε στη λειτουργία εντολής. Από αυτή τη λειτουργία, μπορείτε να αποθηκεύσετε, να διαγράψετε, να κλείσετε ή να αλλάξετε επιλογές.

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

nano

Το nano είναι ένα νεότερο εργαλείο, κατασκευασμένο για να είναι απλό και πιο εύκολο στη χρήση από το vi. Το nano δεν έχει διαφορετικές λειτουργίες. Αντίθετα, ένας χρήστης κατά την εκκίνηση μπορεί να αρχίσει να πληκτρολογεί και χρησιμοποιεί Ctrl για πρόσβαση στα εργαλεία που αποτυπώνονται στο κάτω μέρος της οθόνης.

                         [ Welcome to nano.  For basic help, type Ctrl+G. ]
^G Get Help   ^O Write Out  ^W Where Is   ^K Cut Text   ^J Justify    ^C Cur Pos    M-U Undo
^X Exit       ^R Read File  ^\ Replace    ^U Uncut Text ^T To Spell   ^_ Go To Line M-E Redo

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

Μεταβλητές

Οι μεταβλητές αποτελούν σημαντικό μέρος οποιασδήποτε γλώσσας προγραμματισμού και το Bash δεν διαφέρει. Όταν ξεκινάτε ένα νέο session από το τερματικό, το shell ορίζει ήδη ορισμένες μεταβλητές για εσάς. Η μεταβλητή PATH είναι ένα παράδειγμα αυτού. Αυτές τις ονομάζουμε μεταβλητές περιβάλλοντος, επειδή συνήθως ορίζουν χαρακτηριστικά του περιβάλλοντος του shell μας. Μπορείτε να τροποποιήσετε και να προσθέσετε μεταβλητές περιβάλλοντος, αλλά προς το παρόν ας εστιάσουμε στη ρύθμιση μεταβλητών μέσα στο σενάριό μας.

Θα τροποποιήσουμε το σενάριό μας ώστε να μοιάζει με αυτό:

#!/bin/bash

# This is our first comment. It is also good practice to comment all scripts.

username=Carol

echo "Hello $username!"

Σε αυτήν την περίπτωση, έχουμε δημιουργήσει μια μεταβλητή που ονομάζεται username και της έχουμε εκχωρήσει την τιμή του Carol. Λάβετε υπόψη ότι δεν υπάρχουν κενά μεταξύ του ονόματος της μεταβλητής, του συμβόλου ίσον ή της εκχωρημένης τιμής.

Στην επόμενη γραμμή, χρησιμοποιήσαμε την εντολή echo με τη μεταβλητή, αλλά υπάρχει ένα σύμβολο δολαρίου ($) μπροστά από το όνομα της μεταβλητής. Αυτό είναι σημαντικό, καθώς υποδεικνύει στο shell ότι θέλουμε να αντιμετωπίζουμε το username ως μεταβλητή και όχι απλώς ως κανονική λέξη. Εισάγοντας $username στην εντολή μας, υποδεικνύουμε ότι θέλουμε να εκτελέσουμε μια υποκατάσταση, αντικαθιστώντας το όνομα μιας μεταβλητής με την τιμή που έχει εκχωρηθεί σε αυτήν τη μεταβλητή.

Εκτελώντας το νέο script, παίρνουμε αυτό το αποτέλεσμα:

$ ./new_script.sh
Hello Carol!
  • Τα ονόματα των μεταβλητών πρέπει να περιέχουν μόνο αλφαριθμητικούς χαρακτήρες ή κάτω παύλες και υπόκεινται στη διάκριση πεζών-κεφαλαίων. Το Username και το username θα αντιμετωπίζονται ως ξεχωριστές μεταβλητές.

  • Η υποκατάσταση μεταβλητής μπορεί επίσης να έχει τη μορφή ${username}, με την προσθήκη του { }. Αυτό είναι επίσης αποδεκτό.

  • Οι μεταβλητές στο Bash έχουν έναν υπονοούμενο τύπο και θεωρούνται συμβολοσειρές. Αυτό σημαίνει ότι η εκτέλεση μαθηματικών λειτουργιών στο Bash είναι πιο περίπλοκη από ό,τι θα ήταν σε άλλες γλώσσες προγραμματισμού όπως η C/C++:

#!/bin/bash

# This is our first comment. It is also good practice to comment all scripts.

username=Carol
x=2
y=4
z=$x+$y
echo "Hello $username!"
echo "$x + $y"
echo "$z"
$ ./new_script.sh
Hello Carol!
2 + 4
2+4

Χρήση Εισαγωγικών με Μεταβλητές

Ας κάνουμε την ακόλουθη αλλαγή στην τιμή της μεταβλητής μας username:

#!/bin/bash

# This is our first comment. It is also good practice to comment all scripts.

username=Carol Smith

echo "Hello $username!"

Η εκτέλεση αυτού του script θα μας δώσει ένα σφάλμα:

$ ./new_script.sh
./new_script.sh: line 5: Smith: command not found
Hello !

Λάβετε υπόψη ότι το Bash είναι interpreter και ως εκ τούτου ερμηνεύει το σενάριό μας γραμμή προς γραμμή. Σε αυτήν την περίπτωση, ερμηνεύει σωστά το username=Carol ότι ορίζει μια μεταβλητή username με την τιμή Carol. Αλλά στη συνέχεια ερμηνεύει το κενό διάστημα ως ένδειξη του τέλους αυτής της ανάθεσης και το Smith ως το όνομα μιας εντολής. Για να συμπεριληφθεί το κενό διάστημα και το όνομα Smith ως η νέα τιμή της μεταβλητής μας, θα βάλουμε διπλά εισαγωγικά (") γύρω από το όνομα.

#!/bin/bash

# This is our first comment. It is also good practice to comment all scripts.

username="Carol Smith"

echo "Hello $username!"
$ ./new_script.sh
Hello Carol Smith!

Ένα σημαντικό πράγμα που πρέπει να σημειωθεί για το Bash είναι ότι τα διπλά εισαγωγικά και τα μονά εισαγωγικά (') συμπεριφέρονται πολύ διαφορετικά. Τα διπλά εισαγωγικά θεωρούνται “αδύναμα” επειδή επιτρέπουν στον interpreter να κάνει υποκατάσταση μέσα στα εισαγωγικά. Τα μονά εισαγωγικά θεωρούνται “ισχυρά” επειδή εμποδίζουν την οποιαδήποτε υποκατάσταση απο το να συμβεί. Εξετάστε το ακόλουθο παράδειγμα:

#!/bin/bash

# This is our first comment. It is also good practice to comment all scripts.

username="Carol Smith"

echo "Hello $username!"
echo 'Hello $username!'
$ ./new_script.sh
Hello Carol Smith!
Hello $username!

Στη δεύτερη εντολή echo, ο interpreter δεν μπορεί να υποκαταστήσει το $username με το Carol Smith, και έτσι η έξοδος λαμβάνεται κυριολεκτικά.

Ορίσματα

Είστε ήδη εξοικειωμένοι με τη χρήση ορισμάτων στα βασικά βοηθητικά προγράμματα του Linux. Για παράδειγμα, το rm testfile περιέχει και το εκτελέσιμο rm και ένα όρισμα testfile. Ορίσματα μπορούν να περαστούν στο script κατά την εκτέλεση και θα τροποποιήσουν τον τρόπο συμπεριφοράς του script. Εφαρμόζονται εύκολα.

#!/bin/bash

# This is our first comment. It is also good practice to comment all scripts.

username=$1

echo "Hello $username!"

Αντί να εκχωρήσουμε μια τιμή στο username απευθείας μέσα στο script, του εκχωρούμε την τιμή μιας νέας μεταβλητής $1. Αυτό αναφέρεται στην τιμή του πρώτου ορίσματος.

$ ./new_script.sh Carol
Hello Carol!

Τα πρώτα εννέα ορίσματα αντιμετωπίζονται με αυτόν τον τρόπο. Υπάρχουν τρόποι χειρισμού περισσότερων από εννέα ορισμάτων, αλλά αυτό είναι εκτός του πεδίου αυτού του μαθήματος. Θα δείξουμε ένα παράδειγμα χρησιμοποιώντας μόνο δύο ορίσματα:

#!/bin/bash

# This is our first comment. It is also good practice to comment all scripts.

username1=$1
username2=$2
echo "Hello $username1 and $username2!"
$ ./new_script.sh Carol Dave
Hello Carol and Dave!

Υπάρχει μια σημαντική παράμετρος όταν χρησιμοποιείτε ορίσματα: Στο παραπάνω παράδειγμα, υπάρχουν δύο ορίσματα Carol και Dave, που έχουν εκχωρηθεί σε $1 και $2 αντίστοιχα. Εάν για παράδειγμα λείπει το δεύτερο όρισμα, το shell δεν θα εμφανίσει σφάλμα. Η τιμή του $2 θα είναι απλώς null, ή ανύπαρκτη.

$ ./new_script.sh Carol
Hello Carol and !

Στην περίπτωσή μας, θα ήταν καλή ιδέα να εισάγουμε κάποια λογική στο σενάριό μας, έτσι ώστε διαφορετικές συνθήκες να επηρεάσουν την έξοδο που θέλουμε να εκτυπώσουμε. Θα ξεκινήσουμε εισάγοντας μια άλλη χρήσιμη μεταβλητή και στη συνέχεια θα προχωρήσουμε στη δημιουργία προτάσεων if.

Επιστροφή του Αριθμού των Ορισμάτων

Ενώ μεταβλητές όπως τα $1 και $2 περιέχουν την τιμή των ορισμάτων θέσης, μια άλλη μεταβλητή $# περιέχει τον αριθμό των ορισμάτων.

#!/bin/bash

# This is our first comment. It is also good practice to comment all scripts.

username=$1

echo "Hello $username!"
echo "Number of arguments: $#."
$ ./new_script.sh Carol Dave
Hello Carol!
Number of arguments: 2.

Υποθετική Λογική

Η χρήση της υποθετικής λογικής στον προγραμματισμό είναι ένα τεράστιο θέμα και δεν θα καλυφθεί σε βάθος σε αυτό το μάθημα. Θα επικεντρωθούμε στη σύνταξη των υποθετικών προτάσεων στο Bash, η οποία διαφέρει από τις περισσότερες άλλες γλώσσες προγραμματισμού.

Ας ξεκινήσουμε αναθεωρώντας το τι ελπίζουμε να πετύχουμε. Έχουμε ένα απλό script που θα πρέπει να μπορεί να εκτυπώσει έναν χαιρετισμό σε έναν μόνο χρήστη. Εάν υπάρχει κάτι άλλο εκτός από έναν χρήστη, θα πρέπει να εκτυπώσουμε ένα μήνυμα σφάλματος.

  • Η συνθήκη που ελέγχουμε είναι ο αριθμός των χρηστών, ο οποίος περιέχεται στη μεταβλητή $#. Θα θέλαμε να μάθουμε αν η τιμή του $# είναι 1.

  • Εάν η συνθήκη είναι αληθής, η ενέργεια που θα κάνουμε είναι να χαιρετίσουμε τον χρήστη.

  • Εάν η συνθήκη είναι ψευδής, θα εκτυπώσουμε ένα μήνυμα σφάλματος.

Τώρα που η λογική είναι ξεκάθαρη, θα επικεντρωθούμε στη σύνταξη που απαιτείται για την εφαρμογή αυτής της λογικής.

#!/bin/bash

# A simple script to greet a single user.

if [ $# -eq 1 ]
then
  username=$1

  echo "Hello $username!"
else
  echo "Please enter only one argument."
fi
echo "Number of arguments: $#."

Η υποθετική λογική περιέχεται μεταξύ if και fi. Η συνθήκη προς έλεγχο βρίσκεται ανάμεσα σε αγκύλες [ ] και η ενέργεια που πρέπει να γίνει εάν η συνθήκη είναι αληθής υποδεικνύεται μετά το then. Λάβετε υπόψη τα κενά μεταξύ των αγκύλων και τη λογική που περιέχεται. Η παράλειψη αυτού του διαστήματος θα προκαλέσει σφάλματα.

Αυτό το script θα δώσει είτε τον χαιρετισμό μας, ή το μήνυμα σφάλματος. Αλλά θα εκτυπώνει πάντα τη γραμμή Number of arguments.

$ ./new_script.sh
Please enter only one argument.
Number of arguments: 0.
$ ./new_script.sh Carol
Hello Carol!
Number of arguments: 1.

Λάβετε υπόψη τη πρόταση if. Χρησιμοποιήσαμε το -eq για να κάνουμε μια αριθμητική σύγκριση. Σε αυτήν την περίπτωση, δοκιμάζουμε ότι η τιμή του $# είναι ίση με ένα. Οι άλλες συγκρίσεις που μπορούμε να κάνουμε είναι:

-ne

Μη ίσο με

-gt

Μεγαλύτερο απο

-ge

Μεγαλύτερο απο ή ίσο του

-lt

Μικρότερο απο

-le

Μικρότετο απο ή ίσο του

Καθοδηγούμενες Ασκήσεις

  1. Ο χρήστης πληκτρολογεί τα ακόλουθα στο κέλυφός του:

    $ PATH=~/scripts
    $ ls
    Command 'ls' is available in '/bin/ls'
    The command could not be located because '/bin' is not included in the PATH environment variable.
    ls: command not found
    • Τι έχει κάνει ο χρήστης;

    • Ποια εντολή θα συνδυάσει την τρέχουσα τιμή του PATH με τον νέο κατάλογο ~/scripts;

  2. Εξετάστε το ακόλουθο script. Σημειώστε ότι χρησιμοποιεί το elif για να ελέγξει για μια δεύτερη συνθήκη:

    >  /!bin/bash
    
    > fruit1 = Apples
    > fruit2 = Oranges
    
      if [ $1 -lt $# ]
      then
        echo "This is like comparing $fruit1 and $fruit2!"
    > elif [$1 -gt $2 ]
      then
    >   echo '$fruit1 win!'
      else
    >   echo "Fruit2 win!"
    > done
    • Οι γραμμές που επισημαίνονται με > περιέχουν σφάλματα. Διορθώστε τα σφάλματα.

  3. Ποια θα είναι η έξοδος στις ακόλουθες περιπτώσεις;

    $ ./guided1.sh 3 0
    $ ./guided1.sh 2 4
    $ ./guided1.sh 0 1

Ασκήσεις Εξερεύνησης

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

    if [ $1 == $number ]
    then
      echo "True!"
    fi
  2. Αυτός ο κώδικας είναι σωστός, αλλά δεν είναι σύγκριση αριθμών. Χρησιμοποιήστε μια αναζήτηση στο Διαδίκτυο για να ανακαλύψετε πώς αυτός ο κώδικας διαφέρει από τη χρήση του -eq.

  3. Υπάρχει μια μεταβλητή περιβάλλοντος που θα εκτυπώσει τον τρέχοντα κατάλογο. Χρησιμοποιήστε το env για να ανακαλύψετε το όνομα αυτής της μεταβλητής.

  4. Χρησιμοποιώντας όσα μάθατε στις ερωτήσεις 2 και 3, γράψτε ένα σύντομο script που να δέχεται ένα όρισμα. Εάν ένα όρισμα δοθεί, ελέγξτε αν αυτό το όρισμα ταιριάζει με το όνομα του τρέχοντος καταλόγου. Αν ναι, τυπώστε yes. Διαφορετικά, εκτυπώστε no.

Σύνοψη

Σε αυτή την ενότητα, μάθατε:

  • Πώς να δημιουργήσετε και να εκτελέσετε απλά scripts

  • Πώς να χρησιμοποιήσετε ένα shebang για να καθορίσετε έναν interpreter

  • Πώς να ορίσετε και να χρησιμοποιήσετε μεταβλητές μέσα σε scripts

  • Πώς να χειριστείτε ορίσματα σε scripts

  • Πώς να δημιουργήσετε υποθετικές προτάσεις if

  • Πώς να συγκρίνετε αριθμούς χρησιμοποιώντας αριθμητικούς τελεστές

Εντολές που χρησιμοποιήθηκαν στις ασκήσεις:

echo

Εκτυπώστε μια συμβολοσειρά στη τυπική έξοδο.

env

Εκτυπώνει όλες τις μεταβλητές περιβάλλοντος στη τυπική έξοδο.

which

Εκτυπώνει το απόλυτο path μιας εντολής.

chmod

Αλλάζει τα δικαιώματα ενός αρχείου.

Ειδικές μεταβλητές που χρησιμοποιήθηκαν στις ασκήσεις:

$1, $2, …​ $9

Περιέχουν ορίσματα θέσης που διαβιβάζονται στο script.

$#

Περιέχει τον αριθμό των ορισμάτων που μεταβιβάστηκαν στο script.

$PATH

Περιέχει τους καταλόγους που έχουν εκτελέσιμα που χρησιμοποιούνται από το σύστημα.

Τελεστές που χρησιμοποιήθηκαν στις ασκήσεις:

-ne

Μη ίσο με

-gt

Μεγαλύτερο απο

-ge

Μεγαλύτερο απο ή ίσο του

-lt

Μικρότερο απο

-le

Μικρότετο απο ή ίσο του

Απαντήσεις στις Καθοδηγούμενες Ασκήσεις

  1. Ο χρήστης πληκτρολογεί τα ακόλουθα στο κέλυφός του:

    $ PATH=~/scripts
    $ ls
    Command 'ls' is available in '/bin/ls'
    The command could not be located because '/bin' is not included in the PATH environment variable.
    ls: command not found
    • Τι έχει κάνει ο χρήστης;

      Ο χρήστης έχει αντικαταστήσει τα περιεχόμενα του PATH με τον κατάλογο ~/scripts. Η εντολή ls δεν μπορεί πλέον να βρεθεί, καθώς δεν περιέχεται στο PATH. Λάβετε υπόψη ότι αυτή η αλλαγή επηρεάζει μόνο το τρέχον session, αποσύνδεση και επανασύνδεση θα επαναφέρει την αλλαγή.

    • Ποια εντολή θα συνδυάσει την τρέχουσα τιμή του PATH με τον νέο κατάλογο ~/scripts;

      PATH=$PATH:~/scripts

  2. Εξετάστε το ακόλουθο script. Σημειώστε ότι χρησιμοποιεί το elif για να ελέγξει για μια δεύτερη συνθήκη:

    >  /!bin/bash
    
    > fruit1 = Apples
    > fruit2 = Oranges
    
      if [ $1 -lt $# ]
      then
        echo "This is like comparing $fruit1 and $fruit2!"
    > elif [$1 -gt $2 ]
      then
    >   echo '$fruit1 win!'
      else
    >   echo "Fruit2 win!"
    > done
    • Οι γραμμές που επισημαίνονται με > περιέχουν σφάλματα. Διορθώστε τα σφάλματα.

      #!/bin/bash
      
      fruit1=Apples
      fruit2=Oranges
      
      if [ $1 -lt $# ]
      then
        echo "This is like comparing $fruit1 and $fruit2!"
      elif [ $1 -gt $2 ]
      then
        echo "$fruit1 win!"
      else
        echo "$fruit2 win!"
      fi
  3. Ποια θα είναι η έξοδος στις ακόλουθες περιπτώσεις;

    $ ./guided1.sh 3 0

    Apples win!

    $ ./guided1.sh 2 4

    Oranges win!

    $ ./guided1.sh 0 1

    This is like comparing Apples and Oranges!

Απαντήσεις στις Ασκήσεις Εξερεύνησης

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

    if [ $1 == $number ]
    then
      echo "True!"
    fi
    #!/bin/bash
    
    if [ $# -ne 2 ]
    then
      echo "Error"
    else
      echo "$2 $1"
    fi
  2. Αυτός ο κώδικας είναι σωστός, αλλά δεν είναι σύγκριση αριθμών. Χρησιμοποιήστε μια αναζήτηση στο Διαδίκτυο για να ανακαλύψετε πώς αυτός ο κώδικας διαφέρει από τη χρήση του -eq.

    Χρησιμοποιώντας το == θα συγκριθούν συμβολοσειρές. Δηλαδή, εάν οι χαρακτήρες και των δύο μεταβλητών ταιριάζουν ακριβώς, τότε η συνθήκη είναι αληθής.

    abc == abc

    αληθής

    abc == ABC

    ψευδής

    1 == 1

    αληθής

    1+1 == 2

    ψευδής

    Οι συγκρίσεις συμβολοσειρών οδηγούν σε απροσδόκητη συμπεριφορά εάν δοκιμάζετε αριθμούς.

  3. Υπάρχει μια μεταβλητή περιβάλλοντος που θα εκτυπώσει τον τρέχοντα κατάλογο. Χρησιμοποιήστε το env για να ανακαλύψετε το όνομα αυτής της μεταβλητής.

    PWD

  4. Χρησιμοποιώντας όσα μάθατε στις ερωτήσεις 2 και 3, γράψτε ένα σύντομο script που να δέχεται ένα όρισμα. Εάν ένα όρισμα δοθεί, ελέγξτε αν αυτό το όρισμα ταιριάζει με το όνομα του τρέχοντος καταλόγου. Αν ναι, τυπώστε yes. Διαφορετικά, εκτυπώστε no.

    #!/bin/bash
    
    if [ "$1" == "$PWD" ]
    then
      echo "yes"
    else
      echo "no"
    fi

Linux Professional Insitute Inc. All rights reserved. Επισκεφθείτε την ιστοσελίδα των Μαθησιακών Υλικών: https://learning.lpi.org
Αυτό το έργο έχει άδεια βάσει της Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

Επόμενο Μάθημα

3.3 Μετατροπή Εντολών σε Σενάριο (3.3 Μάθημα 2)

Διάβασε το επόμενο μάθημα

Linux Professional Insitute Inc. All rights reserved. Επισκεφθείτε την ιστοσελίδα των Μαθησιακών Υλικών: https://learning.lpi.org
Αυτό το έργο έχει άδεια βάσει της Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

Το LPI είναι ένας μη κερδοσκοπικός οργανισμός.

© 2023 Το Linux Professional Institute (LPI) είναι το παγκόσμιο πρότυπο πιστοποίησης και οργανισμός υποστήριξης σταδιοδρομίας για επαγγελματίες ανοιχτού κώδικα. Με περισσότερους από 200.000 κατόχους πιστοποίησης, είναι ο πρώτος και μεγαλύτερος στον κόσμο ουδέτερος οργανισμός πιστοποιήσεων Linux και ανοιχτού κώδικα. Το LPI έχει πιστοποιημένους επαγγελματίες σε περισσότερες από 180 χώρες, παραδίδει εξετάσεις σε πολλές γλώσσες και έχει εκατοντάδες συνεργάτες εκπαίδευσης.

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

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Επικοινωνήστε Μαζί Μας
  • Πολιτική Απορρήτου και Πολιτική Cookie

Εντοπίσατε ένα λάθος ή θέλετε να βοηθήσετε στη βελτίωση αυτής της σελίδας; Παρακαλούμε ενημερώστε μας.

© 1999–2023 The Linux Professional Institute Inc. All rights reserved.