5 Shell Scripte fir Linux Newbies fir Shell Programméierung ze léieren - Deel II


Fir eppes ze léieren, musst Dir et maachen, ouni d'Angscht net erfollegräich ze sinn. Ech gleewen un d'Praktikitéit an dofir begleeden ech Iech an déi praktesch Welt vun der Skriptsprooch.

Dësen Artikel ass eng Ausdehnung vun eisem Éischten Artikel Linux Shell a Basic Shell Scripting verstoen - Deel I, wou mir Iech e Geschmaach vum Skript ginn hunn, weider datt mir Iech an dësem Artikel net enttäuschen.

Skript 1: Zeechnen e spezielle Muster

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

Déi meescht vun den uewe genannte 'Schlësselwierder' wären Iech bekannt an déi meescht vun hinnen si selbstänneg. zB, MAX setzt de maximale Wäert vun der Variabel, fir ass eng Loop an alles an der Loop gëtt ëmmer erëm ausgefouert bis d'Loop valabel ass fir de bestëmmte Wäert vum Input.

 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

Wann Dir e bëssen bewosst sidd iwwer all Programméierungssprooch, d'Skript hei uewen ze léieren ass net schwéier, och wann Dir nei sidd mat Berechnung, Programméierung a Linux, wäert et net vill schwéier sinn.

Skript 2: Faarweg Skript erstellen

Wien seet, Linux ass faarweg a langweileg, späichert d'Coden hei drënner op alles [Punkt] sh, maacht et ausführbar a lafen et, vergiesst mir net ze soen wéi et war, Denkt wat Dir kënnt erreechen, implementéiert et iergendwou.

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

Bemierkung: Maacht Iech elo net iwwer de Faarfcode, Déi wichteg fir Iech wäerten op Ärer Zong sinn, no an no.

Opgepasst: Ären Terminal huet vläicht net d'Méiglechkeet ze blénken.

 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

Skript 3: Verschlësselt e Fichier/Verzeechnes

Dëse Skript verschlësselt e Fichier (erënnert Iech un? Verzeechnes/Driver/... alles gëtt als Datei behandelt, am Linux). Déi aktuell Begrenzung vum uewe genannte Skript ass datt et net automatesch Fäerdegstellung vum Numm mat TAB ënnerstëtzt. Ausserdeem musst Dir d'Skript an d'Datei setzen fir am selwechten Dossier ze verschlësselen. Dir musst vläicht \pinentry-gui installéieren, mat Yum oder apt de Package, wann néideg.

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

Kreéiert eng Datei mam Numm Encrypt.sh a setzt de folgende Skript, maacht et ausführbar a lafen se wéi gewisen.

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

Prouf Ausgang

 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: Dëst verschlësselt Är Datei mat engem Passwuert aka Passwuert. An dësem Léierprozess hätt Dir ni geduecht datt den eigentleche Léierprozess sou einfach ka sinn. Also nodeems Dir eng Datei verschlësselt hutt wat Dir braucht? Natierlech! Entschlësselung vun der Datei. An ech wëll dech - de Schüler, de Lieser fir d'Entschlësselungsskript selwer ze schreiwen, maach der keng Suergen, ech loossen dech net an der Mëtt, ech wëll just datt Dir eppes aus dësem Artikel kritt.

Notiz: gpg -d filename.gpg > Dateinumm ass wat Dir braucht fir an Ärem Entschlësselungsskript ëmzesetzen. Dir kënnt Äre Skript am Kommentar posten wann et erfollegräich ass, wann net, kënnt Dir mech froen et fir Iech ze schreiwen.

Skript 4: Iwwerpréift Server Utilisatioun

D'Servernutzung iwwerpréiwen ass eng vun de wichtege Aufgaben vun engem Administrateur, an e gudden Administrateur ass een dee weess wéi hien seng alldeeglech Aufgab automatiséiert. Drënner ass de Skript dat vill esou Informatioun iwwer Äre Server gëtt. Check et selwer.

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

Bemierkung: Ech hunn Iech de Skript ginn deen den Ausgang am Terminal selwer gëtt, wéi wier et mam Ausgang an enger Datei fir zukünfteg Referenz ze kréien. Ëmsetzen et mam Viruleedung Bedreiwer.

  1. ‘>‘ : de Viruleedungsbetreiber verursaacht eng Datei erstellt, a wann et existéiert, gëtt den Inhalt iwwerschriwwen.
  2. ‘>>‘ : wann Dir >> benotzt, gitt Dir Informatioun derbäi, anstatt se ze ersetzen.
  3. ‘>>‘ass sécher, am Verglach zu ‘>‘

Skript 5: Kontrolléiert Disk Space a schéckt eng E-Mail Alarm

Wéi wier et mat enger E-Mail ze kréien wann d'Disknotzung an der Partition PART méi grouss ass wéi Maximal erlaabt, et ass e Liewensspuerskript fir Webadministrateuren mat wéineg Ännerung.

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

Notiz: Ewechzehuelen USER mat Ärem Benotzernumm. Dir kënnt E-Mail iwwerpréiwen andeems Dir 'Mail' Kommando benotzt.

Skript Schreiwen a Programméierung ass iwwer Grenzen, alles an alles kéint ëmgesat ginn wéi néideg. Dat ass alles fir de Moment, A mengem ganz nächsten Artikel ginn ech Iech e puer verschidden Aromen vu Skript. Bis dohin bleift cool an ofgestëmmt, genéisst.