5 scripts de Shell per als principiants de Linux per aprendre a programar Shell - Part II


Per aprendre alguna cosa cal fer-ho, sense por de no tenir èxit. Crec en la practicitat i, per tant, t'acompanyaré al món pràctic del llenguatge de scripting.

Aquest article és una extensió del nostre primer article Comprendre Linux Shell i Basic Shell Scripting - Part I, on us donem un tast de Scripting, continuant que no us decebrà en aquest article.

Guió 1: dibuixar un patró especial

#!/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"

La majoria de les paraules clau anteriors les coneixereu i la majoria s'explica per si mateix. Per exemple, MAX estableix el valor màxim de la variable, for és un bucle i qualsevol cosa dins del bucle s'executa una i altra vegada fins que el bucle és vàlid per al valor d'entrada donat.

 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

Si coneixeu una mica qualsevol llenguatge de programació, aprendre l'script anterior no és difícil, fins i tot si sou nou en computació, programació i Linux, no serà gaire difícil.

Guió 2: Creació de guió colorit

Qui diu, Linux és incolor i avorrit, deseu els codis següents a qualsevol cosa [dot] sh, feu-lo executable i executeu-lo, no oblideu dir-me com va ser, pensa què pots aconseguir, implementant-lo en algun lloc.

#!/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"

Nota: no us molesteu pel codi de colors ara, els que són importants per a vosaltres aniran a la vostra llengua, a poc a poc.

Avís: és possible que el vostre terminal no tingui la possibilitat de parpellejar.

 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

Script 3: xifra un fitxer/directori

Aquest script xifrarà un fitxer (recordeu? directori/controlador/... tot es tracta com a fitxer, a Linux). La limitació actual de l'script anterior és que no admet la completació automàtica del nom amb TAB. A més, cal col·locar l'script i el fitxer a xifrar a la mateixa carpeta. És possible que hàgiu d'instal·lar \pinentry-gui, fent servir el paquet yum o apt, si cal.

 yum install pinentry-gui
 apt-get install pinentry-gui

Creeu un fitxer anomenat Encrypt.sh i col·loqueu el següent script, feu-lo executable i executeu-lo tal com es mostra.

#!/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

Sortida de mostra

 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 : això xifrarà el vostre fitxer, utilitzant una contrasenya, també coneguda com contrasenya. En aquest procés d'aprenentatge mai hauríeu pensat que el procés real d'aprenentatge podria ser tan fàcil. Aleshores, després de xifrar un fitxer, què necessiteu? Òbviament! desxifrant el fitxer. I vull que tu, l'aprenent, el lector, escriguis tu mateix l'script de desxifrat, no et preocupis, no et deixo al mig, només vull que treguis alguna cosa d'aquest article.

Nota: gpg -d nomfitxer.gpg > nomfitxer és el que necessiteu implementar al vostre script de desxifrat. Podeu publicar el vostre guió al comentari si teniu èxit, si no, podeu demanar-me que l'escrigui per vosaltres.

Script 4: Comprovació de l'ús del servidor

Comprovar l'ús del servidor és una de les tasques importants d'un administrador, i un bon administrador és aquell que sap automatitzar la seva tasca diària. A continuació es mostra l'script que donarà molta informació sobre el vostre servidor. Comproveu-ho vosaltres mateixos.

#!/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              [email    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

Nota: us he donat l'script que dóna la sortida al propi terminal, què tal si obteniu la sortida en un fitxer per a una futura referència. Implementeu-lo mitjançant l'operador de redirecció.

  1. ‘>‘ : l'operador de redirecció provoca la creació d'un fitxer i, si existeix, el contingut es sobreescriu.
  2. ‘>>‘ : quan feu servir >>, esteu afegint informació en lloc de substituir-la.
  3. ‘>>‘ és segur, en comparació amb ‘>‘

Script 5: comproveu l'espai en disc i envia una alerta per correu electrònic

Què tal rebre un correu electrònic quan l'ús del disc a la partició PART és més gran que el màxim permès, és un script salvavides per als administradors web amb poques modificacions?

MAX=95
[email 
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

Nota: elimineu USUARI amb el vostre nom d'usuari. Podeu comprovar el correu mitjançant l'ordre correu.

L'escriptura i la programació de guions van més enllà dels límits, qualsevol cosa i tot es pot implementar segons sigui necessari. Això és tot de moment, en el meu proper article us donaré diferents gustos de guió. Fins aleshores estigueu tranquils i atents, gaudiu.