Σημειώσεις:Bourne Again Shell (BASH)
Από OSLab
To bash είναι η έκδοση GNU του αρχικού Bourne shell (/bin/sh). Σε αυτήν την ανανεωτική προσπάθεια ενός κλασικού κελύφους του UNIX δανείστηκαν αρκετά στοιχεία από την οικογένεια των επίσης δημοφιλών κελυφών csh. Πρόκειται για το default κέλυφος του Linux και είναι αυτό που ορίζεται αυτόματα στην δημιουργία των νέων λογαριασμών χρηστών.
Πίνακας περιεχομένων |
Αρχεία αρχικοποίησης
Όταν ξεκινά ένα κέλυφος bash, διαβάζονται με την σειρά ορισμένα αρχεία του χρήστη, τα οποία αρχικοποιούν κατάλληλα το shell σύμφωνα με τις προτιμήσεις του χρήστη. Tα αρχεία αυτά είναι (με την σειρά που αναφέρονται):
- /etc/profile
- ~/.bash_profile
- ~/.bash_login
- ~/.profile
- ~/.bashrc
Από τα παραπάνω αρχεία το πρώτο είναι αρχείο του συστήματος και ελέγχεται μόνο από τον διαχειριστή του συστήματος (root). Σε αυτό τίθενται οι κοινές παράμετροι για όλους τους χρήστες του συστήματος.
Όρισε ότι θα φυλάει τις τελευταίες 50 εντολές:
HSTSIZE=50
Όρισε το prompt:
PS1=' \ w: Command \!$'
Tα κυριότερα χαρακτηριστικά του bash μπορούν vα συνοψιστούν στα παρακάτω:
- Ανακατεύθυνση εισόδου και εξόδου
- Επιτρέπει wildcard χαρακτήρες
- Μεταβλητές κελύφους για εξατομίκευση του περιβάλλοντος
- Ιστορία εντολών (πρόσβαση σε προηγούμενες εντολές) Αριθμητική ακεραίων
- Υπολογισμό αριθμητικών εκφράσεων
- Ψευδώνυμα εντολών (aliasing)
- Έλεγχο διεργασιών (job control)
- Προγραμματιστικές αρχές (διαθέτει μεταβλητές, δομές ελέγχου κλπ.)
Πως καλείται
To bash μπορεί να κληθεί από την γραμμή εντολών ως:
bash [options] [arguments]
Οι διαθέσιμες επιλογές (options) για την έναρξη του bash είναι οι εξής:
- -c str: Διάβασε ως εντολή του κελύφους το string str.
- -i: Δημιούργησε ένα αλληλεπιδραστικό (interactive) κέλυφος.
- --help: Τυπώνει στην οθόνη μία βασική βοήθεια.
- --login: Συμπεριφέρεται ως login shell (το κέλυφος που ξεκινά όταν ο χρήστης εισάγεται στο σύστημα). Διαβάζει με την σειρά όλα τα αρχεία που αναφέρθηκαν στην προηγούμενη ενότητα.
- --noprofile: Ξεκινά χωρίς να διαβάσει τα αρχεία αρχικοποίησης.
- -r: Δημιουργεί ένα περιορισμένο περιβάλλον (restricted) στο οποίο ο χρήστης δεν μπορεί να αλλάξει τον αρχικό κατάλογο ή να χρησιμοποιήσει ανακατευθύνσεις σε αρχεία.
- -s: Διαβάζει ως είσοδο το standard input. H έξοδος των εντολών διοχετεύεται στο standard output (file descriptor 1). Οποιαδήποτε άλλη έξοδος στον file descriptor 2 (standard error).
- -v: Verbose. Τυπώνει την κάθε γραμμή καθώς την εκτελεί. Πολύ χρήσιμο για debugging.
Ορίσματα γραμμής εντολών
Τα ορίσματα γραμμής εντολών (arguments) χρησιμοποιούνται μέσα από το κέλυφος με τις προκαθορισμένες μεταβλητές $1, $2, ... που αντιστοιχούν στο αντίστοιχο όρισμα.
Σύνταξη
Στην ενότητα αυτή παρουσιάζονται ορισμένα χρήσιμα χαρακτηριστικά για την σύνταξη των εντολών του bash, πριν παρουσιαστούν οι εντολές του κελύφους. Δίνονται με την μορφή πινάκων οι ειδικοί χαρακτήρες που χρησιμοποιεί το bash καθώς και μερικά επεξηγηματικά παραδείγματα αυτών.
Μεταχαρακτήρες αρχείων
Με την έννοια μεταχαρακτήρες αρχείων εννοούμε τους χαρακτήρες με την βοήθεια των οποίων μπορούμε να περιγράψουμε τους χαρακτήρες που περιέχονται στα ονόματα των αρχείων που βρίσκονται στο σύστημα αρχείων του συστήματος. Ο παρακάτω πίνακας παρουσιάζει τους κυριότερους τέτοιους μεταχαρακτήρες.
| Χαρακτήρας | Περιγραφή |
| * |
Ταιριάζει σε οποιοδήποτε string με μηδέν ή περισσότερους χαρακτήρες |
| ? |
Ταιριάζει σε οποιονδήποτε μονό χαρακτήρα |
| [abc...] |
Ταιριάζει σε οποιοδήποτε από τα γράμματα a, b, c |
| [a-z...] |
Ταιριάζει σε οποιοδήποτε από τα γράμματα βρίσκεται στο εύρος των a-z στο ASCII αλφάβητο (επιτρέπεται επίσης π.χ. [A-Za-zO-9]) |
| [!abc...] |
Δεν ταιριάζει σε κανένα από τα γράμματα a, b, c |
| {strl,...} |
Ταιριάζει μόνο σε κάποιο από τα strings strl,... |
| ~όνομα |
Αντικαθίσταται από τον χρήστη όνομα |
| ~ + | Αντικαθίσταται από το μονοπάτι του τρέχοντος καταλόγου |
Παραδείγματα:
Τύπωσε όλα τα αρχεία που το όνομά τους ορχίζει με new
$ ls new*
Τύπωσε όλα τα αρχεία που το όνομά τους αρχίζει με new και τελειώνει με txt
$ ls new*txt
Ταιριάζει στο file1, file2, files, κλπ
$ cat file?
Όλα τα αρχεία με όνομα που αρχίζει με κεφαλαίο γράμμα
$ ls [A-Z]*
Όλα τα αρχεία με όνομα που αρχίζει με μικρό γράμμα και τελειώνει σε ένα ψηφίο
$ ls [a-z]* [0-9]
Όλα τα αρχεία με όνομα που αρχίζουν με file ή chap ακολουθούμενο από έναν αριθμό.
$ file {file,chap}[0-9]
Η γραμμή εντολών
Η γραμμή εντολών είναι ένα πολύ δυνατό εργαλείο από το οποίο ο χρήστης εισάγει τις προς εκτέλεση εντολές. Για τον λόγο αυτό, έχει δοθεί αρκετή έμφαση στην φιλικότητα αυτού του εργαλείου. Υπάρχουν ορισμένες εντολές (συνήθως με χρήση του πλήκτρου Control) οι οποίες διευκολύνουν τον χρήστη όσο είναι σε γραμμή εντολών.
| Εντολή | Περιγραφή |
| Crtl-B | Μετακίνηση πίσω ενός χαρακτήρα (χωρίς διαγραφή) |
| Crtl-F | Μετακίνηση μπροστά ενός χαρακτήρα (χωρίς διαγραφή) |
| Ctrl-A | Μετακίνηση στην αρχή της γραμμής εντολών |
| Ctrl-E | Μετακίνηση στο τέλος της γραμμής εντολών |
| Del | Διαγραφή ενός χαρακτήρα προς τα πίσω |
| Ctrl-D | Διαγραφή ενός χαρακτήρα προς τα εμπρός |
| Ctrl-K | Διαγραφή από το τρέχον σημείο μέχρι το τέλος της γραμμής |
| Ctrl-U | Διαγραφή από το τρέχον σημείο μέχρι την αρχή της γραμμής |
| Ctrl-P | Δείχνει την προηγούμενη εντολή από το ιστορικό εντολών |
| Ctrl-N | Δείχνει την επόμενη εντολή από το ιστορικό εντολών |
| Tab | Συμπληρώνει την γραμμή με όνομα εντολής ή αρχείου |
| Esc ? | Παρουσιάζει όλες τις δυνατές συμπληρώσεις |
| Esc @ | Προσπαθεί να συμπληρώσει όνομα υπολογιστή (από το /etc/hosts) |
| Esc $ | Προσπαθεί να συμπληρώσει όνομα μεταβλητής |
| Ctrl-L | Καθαρίζει την οθόνη |
Ειδικοί χαρακτήρες
Οι χαρακτήρες που εμφανίζονται στον παρακάτω πίνακα έχουν ειδική χρήση στο bash.
| Χαρακτήρας | Περιγραφή |
| ' | Διαχωριστικός χαρακτήρας εντολών |
| & | Εκτέλεση διαδικασίας στο παρασκήνιο (background) |
| ( ) | Ομαδοποίηση εντολών (υποκέλυφος, subshell) |
| { } | Block εντολών |
| | | Pipe |
| > < & | Χαρακτήρες ανακατεύθυνσης |
| * ? [ ] ~ ! | Μεταχαρακτήρες αρχείων |
| ' | Αντικατάσταση εντολών |
| $ | Χαρακτηρισμός μεταβλητών |
| # | Σχολιασμός εντολών |
Εισαγωγικά
Τα εισαγωγικά στο bash χρησιμοποιούνται για να διαφύγει (escape) η σημασία που έχουν οι ειδικοί χαρακτήρες και να είναι δυνατό να εκτυπωθούν. Υπάρχουν για τον λόγο αυτό τα διπλά και τα μονά εισαγωγικά όπως επίσης και το backslash.
Tα διπλά εισαγωγικά " " χρησιμοποιούνται να τυπώνονται μηνύματα που περιλαμβάνουν ειδικούς χαρακτήρες. Οτιδήποτε είναι ανάμεσα τους τυπώνεται ως έχει εκτός από τα $, ' (backquote) και φυσικά το ίδιο το διπλό εισαγωγικό πού δηλώνει το τέλος του string.
Tα μονά εισαγωγικά είναι ακόμα πιο αποτελεσματικά, καθώς δεν επιτρέπουν σε κανέναν χαρακτήρα να έχει ειδική σημασία, εκτός του εαυτού του φυσικά.
To backslash τέλος, χρησιμοποιείται για να διαφύγει η ειδική σημασία όλων εκείνων των χαρακτήρων που διατηρούν την ειδική τους σημασία μέσα στα διπλά εισαγωγικά.
Παραδείγματα:
$ echo 'Single quotes "protect" double quotes' Single quotes "protect" double quotes $ echo "Escaping \"double\" quotes..." Escaping "double" quotes... $ echo "You have 'ls | wc -1' files in 'pwd' " You have 23 files in /home/aikater $ x=100 $ echo "The value of \$x is $x" The value of x is 100
Τύποι σύνταξης εντολών
Στο bash υπάρχουν αρκετοί τρόποι με τους οποίους μπορούν να συνταχθούν οι εντολές. Οι πιο ενδιαφέρουσες από αυτές τις περιπτώσεις είναι αυτές των ανακατευθύνσεων και των pipes. Ο παρακάτω πίνακας παρουσιάζει τους τύπους σύνταξης των εντολών στο bash.
| Σύνταξη | Αποτέλεσμα |
| cmd & | Εκτελεί την εντολή στο παρασκήνιο (background) |
| cmdl ; cmd2 | Εκτελεί τις δύο εντολές ακολουθιακά |
| (cmdl ; cmd2) | Εκτελεί τις δύο εντολές σε υποκέλυφος (subshell) |
| cmdl | cmd2 | Pipe: H έξοδος της πρώτης εντολής διοχετεύεται ως είσοδος στην δεύτερη |
| cmdl `cmd2` | Η έξοδος της δεύτερης εντολής, όρισμα της πρώτης |
| (cmdl && cmd2) | Εκτέλεσε την δεύτερη εντολή μόνο όταν επιτύχει η πρώτη |
| (cmdl || cmd2) | Εκτέλεσε την δεύτερη εντολή μόνο αν αποτύχει η πρώτη |
Παραδείγματα:
Συμπίεσε το αρχείο στο παρασκήνιο (background)
$ gzip file.tar &
Ακολουθιακή εκτέλεση: αλλάζει κατάλογο και δείχνει τα αρχεία
$ cd; ls
Εκτέλεσε τις εντολές και γράψε την έξοδό τους σε αρχείο
$ (date; who; pwd) > logfile
Τύπωσε σε εκτυπωτή τις διαδικασίες μου
$ ps -ef | grep user | lpr
Δείξε αναλυτικά τα αρχεία C που περιέχουν το ifdef
$ ls -l `grep -1 ifdef *.c`
Τύπωσε το αρχείο μόνο αν έχει το str
$ grep str infile && lpr infile
Τύπωσε NO αν δεν περιέχεται το str
$ grep str infile || echo NO
Τύποι ανακατευθύνσεων
Οι ανακατευθύνσεις (redirections) είναι ένα από τα πιο χρήσιμα εργαλεία στον προγραμματισμό κελύφους αφού επιτρέπουν με διάφορους τρόπους τους συνδυασμούς εντολών και μεταβλητών. To bash υλοποιεί όλους αυτούς τους τρόπους. Συνοπτικά εμφανίζονται στον παρακάτω πίνακα.
| Ανακατεύθυνση | Λειτουργία |
| > file | Αποθήκευση εξόδου (stdout) στο file |
| < file | Πάρε είσοδο (stdin) από το file |
| cmdl | cmd2 | Pipe: H έξοδος (stdout) της πρώτης, είσοδος (stdin) της δεύτερης |
| >> file | Αποθήκευση εξόδου (stdout) στο file με πρόσθεση στο τέλος του αρχείου (appending) αν υπάρχει ήδη |
| > | file | Αποθήκευση εξόδου (stdout) στο file με επανεγραφή αν ήδη υπάρχει (force overwrite). |
| <> file | Χρησιμοποίησε το ίδιο αρχείο για είσοδο και έξοδο |
| << text | Διάβασε την είσοδο μέχρι να βρεις μια γραμμή με το κείμενο text. Συνήθως για την πρόσθεση ολόκληρων κειμένων στα scripts |
| &> file | Αποθήκευση εξόδου (stdout) και λαθών (stderr) στο file |
| n> file | Κατεύθυνση του περιγραφέα η (file descriptor) στο file |
| n< file | Ορισμός του file στον περιγραφέα n |
| >&n | Αντιγραφή της εξόδους και προς τον περιγραφέα n |
| n>&- | Κλείσιμο του περιγραφέα n για έξοδο |
Στον παραπάνω πίνακα 2.5 γίνεται αναφορά στους περιγραφείς αρχείων (file descriptors). Αυτοί είναι ακέραιοι αριθμοί οι οποίοι είναι μοναδικοί για κάθε ανοικτό αρχείο μέσα από το κέλυφος. Σε επίπεδο προγραμματισμού είναι οι τιμές που επιστρέφουν κλήσεις συστήματος όπως η open(). Σε κάθε κέλυφος, είναι ήδη ανοικτοί πάντα τρείς τέτοιοι περιγραφείς: η είσοδος (standard input ή stdin), η έξοδος (standard output ή stdout) και η έξοδος λαθών (standard error ή stderr). Η είσοδος είναι σχεδόν πάντα ταυτισμένη με το πληκτρολόγιο, ενώ η έξοδος και η έξοδος λαθών είναι η οθόνη. Οι τρεις αυτοί περιγραφείς αντιστοιχούν στους αριθμούς 0, 1 και 2.
Παραδείγματα:
Γράψε τα περιεχόμενα του parti στο book
$ cat parti > book
Πρόσθεσε στο book τα part2 και part3
$ cat part2 part3 >>book
Στείλε το αρχείο message με e-mail στον παραλήπτη recipient
$ Mail recipient < message
Βρες το str στα αρχεία part? και διοχέτευσε τα λάθη στο αρχείο errorfile
$ grep str part? 2 > errorfile
Διάβασε μέχρι την γραμμή που περιέχει το string EOF και τύπωσε μόνο τις γραμμές που περιέχουν το test
$ grep test << EOF </strong>
This is a test line This is not such a line Once more a test line EOF This is a test line Once more a test line
Μεταβλητές
Οι μεταβλητές στο bash ξεκινούν με το $ ενώ προαιρετικά μπορούν να βρίσκονται μέσα σε άγκιστρα. Για την ανάθεση τιμών σε μεταβλητές χρησιμοποιείται το σύμβολο ίσον = (χωρίς την χρήση του δολαρίου). Προσοχή: δεν επιτρέπονται κενά δεξιά ή αριστερά του ίσον!
Παράδειγμα:
$ TMP=teststring
$ echo $TMP (ή όμοια echo ${TMP})
Μπορούν επίσης να οριστούν και πίνακες μεταβλητών με χρήση των αγκυλών. Στην περίπτωση αυτή χρειάζονται οπωσδήποτε τα άγκιστρα.
Παράδειγμα:
$ FILELIST[0]=filel
$ FILELIST[l]=myfile2
$ ls ${FILELIST[1]}
Ειδικές μεταβλητές
Στο bash υπάρχει μία ειδική σειρά από μεταβλητές με ιδιαίτερη σημασία μέσα σε ένα script. Οι κυριότερες από αυτές δίνονται στον παρακάτω πίνακα.
Σημειώστε την ιδιαίτερη χρησιμότητα του $$: Μπορείτε να δημιουργείτε προσωρινά αρχεία με μοναδικό όνομα μέσα από το script. Π.χ. TMPFILE=tmp.$$. Με το $? μπορείτε επίσης να ελέγχεται αν πέτυχε η προηγούμενη εντολή που τρέξατε μέσα από το script (o κωδικός επιτυχίας είναι συνήθως το 0).
| Μεταβλητή | Σημασία |
| $0 | To όνομα του script (όπως argv[0] στην C) |
| ${n} | Η η-οστό όρισμα γραμμής, 1 < η < 9 (όπως argv[n]) |
| $# | Ο ορισμός των ορισμάτων γραμμής (όπως argc) |
| $* $@ | Όλα τα ορίσματα της γραμμής εντολών |
| $$ | To process id της τρέχουσας διαδικασίας του bash |
| $? | Ο κωδικός λάθους της τελευταίας εντολής που έτρεξε |
Αριθμητικές εκφράσεις
To bash επιτρέπει τον υπολογισμό ακέραιων αριθμητικών εκφράσεων με χρήση της εντολής let. Επίσης, για να επιστραφεί το αποτέλεσμα μιας αριθμητικής έκφρασης απευθείας, χρησιμοποιείται το $ (( expr )).
Οι τελεστές που επιτρέπει το bash εμφανίζονται με σειρά προτεραιότητας στον παρακάτω πίνακα.
| Τελεστής | Πράξη |
| - | To μείον ως πρόθεμα αρνητικών ακεραίων |
| ! ~ | Λογική άρνηση, δυαδική αντιστροφή με συμπλήρωμα κατά 1 |
| * / % | Πολλαπλασιασμός, διαίρεση, υπόλοιπο (modulo) |
| + - | Πρόσθεση, αφαίρεση |
| << >> | Shift αριστερά, Shift δεξιά |
| <= >= | Μικρότερο ίσο, μεγαλύτερο ίσο |
| < > | Μικρότερο, μεγαλύτερο |
| == ! = | Ισότητα, ανισότητα |
| & | AND (bitwise) |
| ^ | XOR (bitwise) |
| | | OR (bitwise) |
| && | Λογικό AND |
| || | Λογικό OR |
| = | Ανάθεση τιμών |
| +=, -= | Ανάθεση τιμής μετά από πρόσθεση, αφαίρεση (όμοια με C) |
| *=, /=, %.= | Ανάθεση τιμής μετά από πολ/μό, διαίρεση, υπόλοιπο |
| &=, |= | Ανάθεση τιμής μετά από bitwise πράξεις |
| <<=, >>= | Ανάθεση τιμής μετά από shifts |
Παραδείγματα:
$ T0DAY=`date +%-d` ; echo $(($T0DAY+7)) $ let "count=0" "i=i+1" $ let "num % 2"
Ενσωματωμένες εντολές
To bash ως shell έχει την δυνατότητα να εκτελεί εντολές του συστήματος. Ωστόσο, προκειμένου να είναι κι ένα αποδοτικό εργαλείο προγραμματισμού, διαθέτει κι έναν μεγάλο αριθμό από ενσωματωμένες (built-in) εντολές που ολοκληρώνουν τα απαραίτητα εργαλεία που χρειάζεται ο χρήστης.
Στην ενότητα αυτή παρουσιάζονται μόνο οι βασικές τέτοιες εντολές, με προσανατολισμό κυρίως τις προγραμματιστικές δομές ελέγχου των scripts.
if
Είναι η βασική δομή για τον έλεγχο περιπτώσεων. Συντάσσεται με τους εξής τρόπους:
if test-cmds then Cmds1 fi
if test-cmds then Cmds1 else Cmds2 fi
if test-cmds then Cmds1 elsif test-cmds2 then Cmds2 elsif test-cmds3 then Cmds3 ... else Cmds-n fi
Για να εκτελεστεί επιτυχώς το then θα πρέπει η λογική συνθήκη του test-cmds (συνήθως μία εντολή test -βλ. παρακάτω- ή συνθήκη εντός αγκυλών) να επιστρέψει την τιμή 0 (επιτυχία). Ειδάλλως εκτελούνται διαδοχικά τα else και elsif.
for
Είναι η βασική δομή για την επανάληψη εντολών. Συντάσσεται με τον εξής τρόπο:
for x [in list] do commands done
Ορίζει στην μεταβλητή x κάθε μία από τις τιμές της λίστας list και τρέχει τις εντολές commands. Av παραληφθεί ο ορισμός της λίστας, ως λίστα θεωρούνται τα ορίσματα τις γραμμής εντολών.
Παραδείγματα: Συνένωση όλων των αρχείων του καταλόγου σε ένα μεγαλύτερο στο προηγούμενο κατάλογο.
for file in * do cat $file >> ../concat.txt done
Έστω ότι το αρχείο filelist περιέχει μία λίστα με αρχεία στα οποία θέλουμε να ψάξουμε το string "chapter"
for i in 'cat filelist' do echo "Looking for string chapter in file $i" grep -i chapter $i done
while
Είναι η βασική δομή για την υπο κρητήρια επανάληψη εντολών. Συντάσσεται με τον εξής τρόπο:
while test-cmds do commands done
Όσο η συνθήκες στο test-cmds επιστρέφουν 0, εκτέλεσε τις εντολές commands. Η συνθήκη ελέγχου είναι της ίδιας μορφής με την if.
Παράδειγμα: Ένας βρόγχος από 1 μέχρι 100:
let "count=0" while [ $count -lt 100 ] do echo "Counter value is $count"
let "count = count +1"
done
until
Είναι η βασική δομή για την υπο κρητήρια επανάληψη εντολών. Συντάσσεται με τον εξής τρόπο:
until test-cmds do commands done
Όμοια με την while με την μόνη διαφορά ότι οι εντολές εκτελούνται τουλάχιστον μια φορά πριν γίνει έλεγχος της συνθήκης.
break
Σύνταξη:
break [n]
Εισάγεται μέσα σε κάποιον από τους βρόγχους for, while, until και όταν κληθεί, διακόπτει τις επαναλήψεις του βρόγχου (το script συνεχίζει από την επόμενη εντολή εκτός βρόγχου). Χρησιμοποιείται δηλαδή όπως το break στην C. Προαιρετικά, και στην περίπτωση που υπάρχουν εμφωλιασμένοι βρόγχοι (nested loops) μπορεί να συνταχθεί με παράμετρο έναν ακέραιο αριθμό που δείχνει πόσους εσωτερικούς (εμφωλιασμένους) βρόγχους θα διακόψει.
continue
Σύνταξη:
continue
Εισάγεται στους βρόγχους for, while, until και η εκτέλεση βγαίνει από την τρέχουσα επανάληψη, και συνεχίζει με την επόμενη. Η χρήση του είναι όμοια με το continue της C.
test
Σύνταξη:
test condition
ή
[ condition ]
Είναι η βασική εντολή ελέγχου στα scripts. Συνήθως εμφανίζεται με την δεύτερη σύνταξη (με τις αγκύλες). Η test ελέγχει συνήθως συνθήκες που αφορούν αρχεία (αλλά όχι μόνο). Δέχεται έναν μεγάλο αριθμό παραμέτρων.
| Συνθήκη | Έλεγχος |
| -a file | To File υπάρχει |
| -b file | To File είναι ειδικό αρχείο block (device) |
| -c file | To File είναι ειδικό αρχείο character (device) |
| -d file | To File είναι directory |
| -e file | To File υπάρχει (exists) |
| -f file | To File είναι ένα κανονικό (regulrar) αρχείο |
| -g file | To File έχει Set-Group-ID bit ορισμένο |
| -h file | To File είναι συμβολικό link (in -s . . .) |
| -p file | To File είναι pipe (FIFO) |
| -r file | To File μπορεί να διαβαστεί (readable) |
| -s file | To File έχει μέγεθος μεγαλύτερο του 0 |
| -u file | To File έχει Set-User-ID bit ορισμένο |
| -w file | To File μπορεί να γραφεί (writable) |
| -x file | To File είναι εκτελέσιμο (executable) |
| -N file | To File έχει αλλάξει από την τελευταία ανάγνωση |
| -S file | To File είναι socket |
| f1 -nt f2 | To f1 είναι νεότερο του f2 |
| f1 -ot f2 | To f1 είναι παλιότερο του f2 |
| -n s1 | To string s1 έχει μη μηδενικό μέγεθος |
| -z s1 | To string s1 έχει μηδενικό μέγεθος |
| s1 = s2 | Τα strings s1 και s2 είναι ίδια |
| s1 == s2 | Τα strings s1 και s2 είναι ίδια |
| s1 != s2 | Τα strings s1 και s2 είναι διαφορετικά |
| s1 < s2 | To string s1 είναι μικρότερο αλφαβητικά από το s2 |
| s1 > s2 | To string s1 είναι μεγαλύτερο αλφαβητικά από το s2 |
| string | To string string δεν είναι κενό (null) |
| n1 -eq n2 | 0 n1 είναι ίσος με τον n2 |
| n1 -ge n2 | 0 n1 είναι μεγαλύτερος ή ίσος με τον n2 |
| n1 -gt n2 | 0 n1 είναι μεγαλύτερος από τον n2 |
| n1 -le n2 | 0 n1 είναι μικρότερος ή ίσος με τον n2 |
| n1 -It n2 | 0 n1 είναι μικρότερος από τον n2 |
| n1 -ne n2 | 0 n1 δεν είναι ίσος με τον n2 |
Για να αντιστραφεί μία από τις παραπάνω συνθήκες χρησιμοποιείται το θαυμαστικό (!). Επίσης, επιτρέπονται και συνενώσεις συνθηκών με το λογικό AND (-a) και το λογικό OR (-o).
Παραδείγματα: Όσο υπάρχουν ακόμα ορίσματα...
$ while test $# -gt 0
Όσο το πρώτο όρισμα είναι μη-άδειο...
$ while [ -n "$1" ]
Αν το count είναι μικρότερο του 100
$ if [ $count -lt 100 ]
Αν υπάρχει το directory Mail...
$ if [ -d Mail ]
Αν η απάντηση δεν είναι y...
$ if [ "$answer" != "y" ]
Αν το πρώτο όρισμα δεν είναι αναγνώσιμο ή κανονικό αρχείο...
$ if [ ! -r "$1" -o ! -f "$1" ]
case
Σύνταξη:
case string in regex) commands) esac
Av το string ταιριάζει στην κανονική έκφραση regex τότε εκτελούνται οι εντολές commands. Av το regex είναι το *, αυτό ταιριάζει με κάθε string (είναι το αντίστοιχο της default στην C).
alias
Σύνταξη:
alias [-p] [ name[='cmd'] ]
Ορίζει ψευδώνυμα εντολών. Με όρισμα μόνο το όνομα, δείχνει το ψευδώνυμο που αντιστοιχεί στο όνομα, ενώ με την παράμετρο -p τυπώνει όλα τα ψευδώνυμα που ισχύουν εκείνη την στιγμή.
echo
Σύνταξη:
echo [options] [string]
Η echo τυπώνει το string στην έξοδο. Αν δεν υπάρχει κανένα όρισμα, τυπώνει απλά μία κενή γραμμή στην έξοδο. Από τις παραμέτρους της, η πιο σημαντική είναι η -n, η οποία αφού τυπώσει το string στην έξοδο, δεν αλλάζει γραμμή.
eval
Σύνταξη:
eval [command args...]
Εκτελεί μέσα από ένα script την εξωτερική εντολή command με προαιρετικά τα ορίσματα args...
exit
Σύνταξη:
exit [n]
Τερματίζει ένα shell script με κωδικό λάθους η. Αν δεν οριστεί το n, τότε ο κωδικός λάθους είναι αυτός της τελευταίας εντολής που έτρεξε μέσα από το script. Κωδικός λάθους 0 σημαίνει επιτυχία, οτιδήποτε άλλο αποτυχία.
Παράδειγμα:
if [ $# -eq 0 ] ; then echo "Usage: $0 [-options] file(s) exit 1 # Error status fi
export
Σύνταξη:
export [options] [variables] export [options] [name=[value]]...
Με την export μία μεταβλητή του shell γίνεται μεταβλητή περιβάλλοντος ώστε να μπορεί να χρησιμοποιηθεί κι από άλλα προγράμματα. Είναι χρήσιμη στην περίπτωση που τρέχουν συνεργαζόμενα περισσότερα του ενός scripts. Με την επιλογή -p τυπώνονται όλες οι μεταβλητές που γίνονται export από το τρέχον shell. H επιλογη -n ακυρώνει το export μιας μεταβλητής.
jobs
Σύνταξη:
jobs [options] [joblDs]
Τυπώνει όλες τις διαδικασίες που τρέχουν ή είναι σταματημένες στο τρέχον shell. Υλοποιεί τις λειτουργίες job control του bash.
| Επιλογή | Σημασία |
| -l | Τυπώνει τα job IDs μαζί με το process group ID |
| -n | Τυπώνει μόνο τα jobs που έχουν αλλάξει από την τελευταία jobs |
| -p | Τυπώνει μόνο το process group ID |
| -r | Τυπώνει μόνο τις διαδικασίες που τρέχουν (running) |
| -s | Τυπώνει μόνο τις διαδικασίες που έχουν σταματήσει (stopped) |
kill
Σύνταξη:
kill [options] IDs
Στέλνει ένα signal σε μία διαδικασία. Συνήθως η kill χρησιμοποιείται για να τερματίζει μια διαδικασία (εκτός κι αν ο χειρισμός των σημάτων από την διαδικασία είναι διαφορετικός). Για να σταλεί επιτυχώς ένα σήμα, ο χρήστης πρέπει να είναι είτε ο ιδιοκτήτης της διαδικασίας, είτε ο διαχειριστής του συστήματος (root).
| Επιλογή | Σημασία |
| -signal | Στέλνει το συγκεκριμένο signal στην διαδικασία |
| -l | Τυπώνει στην οθόνη όλα τα διαθέσιμα signals |
bg
Σύνταξη:
bg [jobIDs]
Θέτει στο παρασκήνιο (background) μία διαδικασία ή την διαδικασία με job ID το jobID.
fg
Σύνταξη:
fg [jobIDs]
Επαναφέρει στο προσκήνιο (foreground) μία διαδικασία ή την διαδικασία με job ID το jobID.

