5 Shell skripti za Linux početnike da nauče shell programiranje - II dio


Da biste nešto naučili morate to učiniti, bez straha da ćete biti neuspješni. Vjerujem u praktičnost i stoga ću vas pratiti u praktični svijet jezika pisanja.

Ovaj članak je produžetak našeg prvog članka Razumijevanje Linux ljuske i osnovne shell skripte – I dio, gdje smo vam dali okus skriptiranja, nastavljajući da vas nećemo razočarati u ovom članku.

Skripta 1: Crtanje posebnog uzorka

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

Većina gore navedenih ‘ključnih riječi’ bi vam bila poznata i većina njih je sama po sebi razumljiva. npr., MAX postavlja maksimalnu vrijednost varijable, jer je petlja i sve unutar petlje se izvršava iznova i iznova sve dok petlja ne bude važeća za datu vrijednost unosa.

Sample Output
[root@tecmint ~]# chmod 755 Special_Pattern.sh
[root@tecmint ~]# ./Special_Pattern.sh
Enter Number between (5 to 9) : 6
       .
      . .
     . . .
    . . . .
   . . . . .
  . . . . . .
  . . . . . .
   . . . . .
    . . . .
     . . .
      . .
       .

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

Ako ste malo svjesni bilo kojeg programskog jezika, učenje gornje skripte nije teško, čak i ako ste novi u računanju, programiranju i Linuxu, neće biti mnogo teško.

Preuzmite Special_Pattern.sh

Skripta 2: Kreiranje šarene skripte

Ko kaže, Linux je bezbojan i dosadan, sačuvajte kodove ispod na bilo šta [dot] sh, učinite ga izvršnim i pokrenite ga, nemojte Ne zaboravite da mi kažete kako je bilo, razmislite šta možete postići, implementirajući to negde.

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

Napomena: Ne trudite se sada oko koda boja, oni koji su vam važni bit će vam na jeziku, postepeno.

Upozorenje: Vaš terminal možda nema mogućnost treptanja.

Sample Output
[root@tecmint ~]# chmod 755 Colorfull.sh
[root@tecmint ~]# ./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

Preuzmite Colorfull.sh

Skripta 3: Šifriranje datoteke/direktorijuma

Ova skripta će šifrirati datoteku (sjećate li se? direktorij/driver/…. sve se tretira kao fajl, u Linuxu >). Trenutno ograničenje gornje skripte je da ne podržava automatsko dovršavanje imena pomoću TAB. Štaviše, potrebno je da skriptu i datoteku stavite u isti folder. Možda ćete morati da instalirate “pinentry-gui”, koristeći yum ili apt paket, ako je potrebno.

[root@midstage ~]# yum install pinentry-gui
[root@midstage ~]# apt-get install pinentry-gui

Kreirajte datoteku pod nazivom “Encrypt.sh” i postavite sljedeću skriptu, učinite je izvršnom i pokrenite je kao što je prikazano.

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

Sample Output

[root@tecmint ~]# chmod 755 Encrypt.sh
[root@tecmint ~]# ./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 : Ovo će šifrirati vašu datoteku, koristeći šifru zvanu lozinka. U ovom procesu učenja nikada ne biste pomislili da bi stvarni proces učenja mogao biti tako lak. Dakle, šta vam treba nakon šifriranja datoteke? Očigledno! dešifrovanje fajla. I želim da vi – učenik, čitatelj sami napišete skriptu za dešifriranje, ne brinite, neću vas ostaviti u sredini, samo želim da dobijete nešto iz ovog članka.

Napomena: gpg -d ime datoteke.gpg > ime datoteke je ono što trebate implementirati u svoju skriptu za dešifriranje. Možete objaviti svoj skript u komentaru ako bude uspješan, ako ne, možete me zamoliti da ga napišem za vas.

Preuzmite Encrypt.sh

Skripta 4: Provjera iskorištenosti servera

Provjera iskorištenosti servera jedan je od važnih zadataka administratora, a dobar administrator je onaj koji zna automatizirati svoj svakodnevni zadatak. Ispod je skripta koja će dati mnogo takvih informacija o vašem serveru. Provjerite sami.

#!/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
Sample Output
[root@tecmint ~]# chmod 755 Server-Health.sh
[root@tecmint ~]# ./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              LOGIN@   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

Napomena: Dao sam vam skriptu koja daje izlaz u samom terminalu, kako bi bilo da dobijete izlaz u datoteci za buduću upotrebu. Implementirajte ga koristeći operator preusmjeravanja.

  1. >’ : operator preusmjeravanja uzrokuje kreiranje datoteke, a ako postoji, sadržaj se prepisuje.
  2. >>’ : kada koristite >>, dodajete informacije, umjesto da ih zamjenjujete.
  3. >>’ je siguran, u poređenju sa ‘>

Preuzmite Server-Health.sh

Skripta 5: Provjerite prostor na disku i šalje upozorenje e-poštom

Kako bi bilo da dobijete e-poštu kada je korištenje diska u particiji PART veće od maksimalno dozvoljenog, to je skripta za spašavanje života za web administratore sa malim modifikacijama.

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

Napomena: Uklonite “USER” sa svojim korisničkim imenom. Možete provjeriti poštu koristeći naredbu „mail“.

Preuzmite Check-Disk-Space.sh

Pisanje skripti i programiranje je izvan granica, sve i svašta se može implementirati po potrebi. To je sve za sada, u svom sledećem članku daću vam neke različite ukuse skriptovanja. Do tada ostanite hladni i uglađeni, uživajte.