5 Σενάρια Shell για αρχάριους Linux για να μάθουν προγραμματισμό Shell - Μέρος II


Για να μάθεις κάτι πρέπει να το κάνεις, χωρίς να φοβάσαι ότι θα αποτύχεις. Πιστεύω στην πρακτικότητα και ως εκ τούτου θα σας συνοδεύσω στον πρακτικό κόσμο της Γλώσσας Σεναρίου.

Αυτό το άρθρο είναι μια επέκταση του Πρώτου μας άρθρου Κατανόηση του κελύφους Linux και του βασικού σεναρίου κελύφους – Μέρος Ι, όπου σας δώσαμε μια γεύση από τη δέσμη ενεργειών, συνεχίζοντας ότι δεν θα σας απογοητεύσουμε σε αυτό το άρθρο.

Σενάριο 1: Σχεδιάζοντας ένα ειδικό μοτίβο

#!/bin/bash
MAX_NO=0
echo -n "Enter Number between (5 to 9) : "
read MAX_NO
if ! [ $MAX_NO -ge 5 -a $MAX_NO -le 9 ] ; then
   echo "WTF... I ask to enter number between 5 and 9, Try Again"
   exit 1
fi
clear
for (( i=1; i<=MAX_NO; i++ )) do     for (( s=MAX_NO; s>=i; s-- ))
    do
       echo -n " "
    done
    for (( j=1; j<=i;  j++ ))     do      echo -n " ."      done     echo "" done ###### Second stage ###################### for (( i=MAX_NO; i>=1; i-- ))
do
    for (( s=i; s<=MAX_NO; s++ ))
    do
       echo -n " "
    done
    for (( j=1; j<=i;  j++ ))
    do
     echo -n " ."
    done
    echo ""
done
echo -e "\n\n\t\t\t Whenever you need help, linux-console.net is always there"

Οι περισσότερες από τις παραπάνω «λέξεις-κλειδιά» θα ήταν γνωστές σε εσάς και οι περισσότερες από αυτές είναι αυτονόητες. π.χ., το MAX ορίζει τη μέγιστη τιμή της μεταβλητής, το for είναι ένας βρόχος και οτιδήποτε εντός του βρόχου εκτελείται ξανά και ξανά έως ότου ο βρόχος είναι έγκυρος για δεδομένη τιμή εισόδου.

Δείγμα εξόδου
[ ~]# chmod 755 Special_Pattern.sh
[ ~]# ./Special_Pattern.sh
Enter Number between (5 to 9) : 6
       .
      . .
     . . .
    . . . .
   . . . . .
  . . . . . .
  . . . . . .
   . . . . .
    . . . .
     . . .
      . .
       .

                         Whenever you need help, linux-console.net is always there

Εάν γνωρίζετε λίγο κάποια γλώσσα προγραμματισμού, η εκμάθηση της παραπάνω δέσμης ενεργειών δεν είναι δύσκολη, ακόμα κι αν είστε νέοι στους υπολογιστές, τον προγραμματισμό και το Linux δεν θα είναι πολύ δύσκολο.

Σενάριο 2: Δημιουργία πολύχρωμου σεναρίου

Ποιος λέει, Το Linux είναι άχρωμο και βαρετό, αποθηκεύστε τους παρακάτω κωδικούς σε οτιδήποτε [dot] sh, κάντε το εκτελέσιμο και εκτελέστε το, μην μην ξεχάσεις να μου πεις πώς ήταν, Σκέψου τι μπορείς να πετύχεις, εφαρμόζοντάς το κάπου.

#!/bin/bash
clear 
echo -e "33[1m Hello World"
# bold effect
echo -e "33[5m Blink"
# blink effect
echo -e "33[0m Hello World"
# back to normal
echo -e "33[31m Hello World"
# Red color
echo -e "33[32m Hello World"
# Green color
echo -e "33[33m Hello World"
# See remaining on screen
echo -e "33[34m Hello World"
echo -e "33[35m Hello World"
echo -e "33[36m Hello World"
echo -e -n "33[0m"
# back to normal
echo -e "33[41m Hello World"
echo -e "33[42m Hello World"
echo -e "33[43m Hello World"
echo -e "33[44m Hello World"
echo -e "33[45m Hello World"
echo -e "33[46m Hello World"
echo -e "33[0m Hello World"

Σημείωση: Μην ασχολείστε τώρα με τον χρωματικό κώδικα, αυτά που είναι σημαντικά για εσάς θα είναι στη γλώσσα σας, σταδιακά.

Προειδοποίηση: Το τερματικό σας ενδέχεται να μην αναβοσβήνει.

Δείγμα εξόδου
[ ~]# chmod 755 Colorfull.sh
[ ~]# ./Colorfull.sh

Hello World
Blink
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World

Σενάριο 3: Κρυπτογράφηση αρχείου/καταλόγου

Αυτό το σενάριο θα κρυπτογραφήσει ένα αρχείο (θυμάστε; κατάλογος/πρόγραμμα οδήγησης/…. όλα αντιμετωπίζονται ως αρχείο, στο Linux ). Ο τρέχων περιορισμός του παραπάνω σεναρίου είναι ότι δεν υποστηρίζει την αυτόματη συμπλήρωση του ονόματος χρησιμοποιώντας TAB. Επιπλέον, πρέπει να τοποθετήσετε το σενάριο και το αρχείο που θα κρυπτογραφηθούν στον ίδιο φάκελο. Ίσως χρειαστεί να εγκαταστήσετε το \pinentry-gui, χρησιμοποιώντας yum ή apt το πακέτο, εάν απαιτείται.

[ ~]# yum install pinentry-gui
[ ~]# apt-get install pinentry-gui

Δημιουργήστε ένα αρχείο που ονομάζεται Encrypt.sh και τοποθετήστε το ακόλουθο σενάριο, κάντε το εκτελέσιμο και εκτελέστε το όπως φαίνεται.

#!/bin/bash
echo "Welcome, I am ready to encrypt a file/folder for you"
echo "currently I have a limitation, Place me to thh same folder, where a file to be 
encrypted is present"
echo "Enter the Exact File Name with extension"
read file;
gpg -c $file
echo "I have encrypted the file successfully..."
echo "Now I will be removing the original file"
rm -rf $file

Δείγμα εξόδου

[ ~]# chmod 755 Encrypt.sh
[ ~]# ./Encrypt.sh

Welcome, I am ready to encrypt a file/folder for you
currently I have a limitation, Place me to the same folder, where a file to be

encrypted is present
Enter the Exact File Name with extension

package.xml

                                                   ┌─────────────────────────────────────────────────────┐
                                                   │ Enter passphrase                                    │
                                                   │                                                     │
                                                   │                                                     │
                                                   │ Passphrase *******_________________________________ │
                                                   │                                                     │
                                                   │       <OK>                             <Cancel>     │
                                                   └─────────────────────────────────────────────────────┘

Please re-enter this passphrase

                                                   ┌─────────────────────────────────────────────────────┐
                                                   │ Please re-enter this passphrase                     │
                                                   │                                                     │
                                                   │ Passphrase ********________________________________ │
                                                   │                                                     │
                                                   │       <OK>                             <Cancel>     │
                                                   └─────────────────────────────────────────────────────┘

I have encrypted the file successfully...
Now I will be removing the original file
</pre>

gpg -c : Αυτό θα κρυπτογραφήσει το αρχείο σας, χρησιμοποιώντας έναν κωδικό πρόσβασης γνωστό και ως κωδικός πρόσβασης. Σε αυτή τη διαδικασία μάθησης δεν θα σκεφτόσασταν ποτέ ότι η πραγματική διαδικασία μάθησης θα μπορούσε να είναι τόσο εύκολη. Μετά την κρυπτογράφηση ενός αρχείου τι χρειάζεστε; Προφανώς! αποκρυπτογράφηση του αρχείου. Και θέλω εσείς – ο μαθητής, ο αναγνώστης να γράψετε μόνοι σας το σενάριο αποκρυπτογράφησης, μην ανησυχείτε δεν σας αφήνω στη μέση, απλά θέλω να κερδίσετε κάτι από αυτό το άρθρο.

Σημείωση: Το gpg -d filename.gpg > όνομα αρχείου είναι αυτό που πρέπει να εφαρμόσετε στο σενάριο αποκρυπτογράφησης. Μπορείτε να δημοσιεύσετε το σενάριό σας σε σχόλιο εάν είναι επιτυχές, εάν όχι, μπορείτε να μου ζητήσετε να το γράψω για εσάς.

Σενάριο 4: Έλεγχος χρήσης διακομιστή

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

#!/bin/bash
    date;
    echo "uptime:"
    uptime
    echo "Currently connected:"
    w
    echo "--------------------"
    echo "Last logins:"
    last -a |head -3
    echo "--------------------"
    echo "Disk and memory usage:"
    df -h | xargs | awk '{print "Free/total disk: " $11 " / " $9}'
    free -m | xargs | awk '{print "Free/total memory: " $17 " / " $8 " MB"}'
    echo "--------------------"
    start_log=`head -1 /var/log/messages |cut -c 1-12`
    oom=`grep -ci kill /var/log/messages`
    echo -n "OOM errors since $start_log :" $oom
    echo ""
    echo "--------------------"
    echo "Utilization and most expensive processes:"
    top -b |head -3
    echo
	top -b |head -10 |tail -4
    echo "--------------------"
    echo "Open TCP ports:"
    nmap -p- -T4 127.0.0.1
    echo "--------------------"
    echo "Current connections:"
    ss -s
    echo "--------------------"
    echo "processes:"
    ps auxf --width=200
    echo "--------------------"
    echo "vmstat:"
    vmstat 1 5
Δείγμα εξόδου
[ ~]# chmod 755 Server-Health.sh
[ ~]# ./Server-Health.sh

Tue Jul 16 22:01:06 IST 2013
uptime:
 22:01:06 up 174 days,  4:42,  1 user,  load average: 0.36, 0.25, 0.18
Currently connected:
 22:01:06 up 174 days,  4:42,  1 user,  load average: 0.36, 0.25, 0.18
USER     TTY      FROM                 IDLE   JCPU   PCPU WHAT
tecmint   pts/0    116.72.134.162   21:48    0.00s  0.03s  0.03s sshd: tecmint [priv]
--------------------
Last logins:
tecmint   pts/0        Tue Jul 16 21:48   still logged in    116.72.134.162
tecmint   pts/0        Tue Jul 16 21:24 - 21:43  (00:19)     116.72.134.162
--------------------
Disk and memory usage:
Free/total disk: 292G / 457G
Free/total memory: 3510 / 3838 MB
--------------------
OOM errors since Jul 14 03:37 : 0
--------------------
Utilization and most expensive processes:
top - 22:01:07 up 174 days,  4:42,  1 user,  load average: 0.36, 0.25, 0.18
Tasks: 149 total,   1 running, 148 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.0%sy,  0.0%ni, 99.3%id,  0.6%wa,  0.0%hi,  0.0%si,  0.0%st

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0  3788 1128  932 S  0.0  0.0   0:32.94 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:14.07 migration/0

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

  1. >‘ : ο τελεστής ανακατεύθυνσης προκαλεί τη δημιουργία αρχείου και, αν υπάρχει, τα περιεχόμενα αντικαθίστανται.
  2. >>‘ : όταν χρησιμοποιείτε το >>, προσθέτετε πληροφορίες αντί να τις αντικαθιστάτε.
  3. Το
  4. >>’ είναι ασφαλές, σε σύγκριση με το ‘>

Σενάριο 5: Ελέγξτε το χώρο στο δίσκο και στέλνει μια ειδοποίηση μέσω email

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

MAX=95

PART=sda1
USE=`df -h |grep $PART | awk '{ print $5 }' | cut -d'%' -f1`
if [ $USE -gt $MAX ]; then
  echo "Percent used: $USE" | mail -s "Running out of disk space" $EMAIL
fi

Σημείωση: Καταργήστε το USER με το όνομα χρήστη σας. Μπορείτε να ελέγξετε την αλληλογραφία χρησιμοποιώντας την εντολή mail.

Η συγγραφή σεναρίων και ο προγραμματισμός είναι πέρα από τα όρια, οτιδήποτε και τα πάντα θα μπορούσαν να εφαρμοστούν όπως απαιτείται. Αυτό είναι όλο για τώρα, στο επόμενο άρθρο μου θα σας δώσω μερικές διαφορετικές γεύσεις σεναρίου. Μέχρι τότε μείνετε ψύχραιμοι και συντονισμένοι, απολαύστε.