5 shell-scripts til Linux-nybegyndere til at lære shell-programmering - del II


For at lære noget skal du gøre det uden frygt for at mislykkes. Jeg tror på praktisk funktion og vil derfor ledsage dig til den praktiske verden af scriptingsprog.

Denne artikel er en udvidelse af vores første artikel Forstå Linux Shell og Basic Shell Scripting - Del I, hvor vi gav dig en smag af Scripting, og fortsætter med at vi ikke skuffer dig i denne artikel.

Script 1: Tegning af et specielt mønster

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

De fleste af ovenstående 'nøgleord' ville være kendt af dig, og de fleste af dem forklarer sig selv. fx MAX indstiller den maksimale værdi af variablen, for er en loop, og alt inden i loop kommer til at udføres igen og igen, indtil loop er gyldig for en given værdi af 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

Hvis du er lidt opmærksom på ethvert programmeringssprog, er det ikke svært at lære ovenstående script, selvom du er ny inden for beregning, programmering og Linux, bliver det ikke meget svært.

Script 2: Oprettelse af farverigt script

Hvem siger, Linux er farveløs og kedelig, gem nedenstående koder til noget [dot] sh, gør det eksekverbart og kør det, glem ikke at fortælle mig, hvordan det var, tænk hvad du kan opnå, implementer det et eller andet sted.

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

Bemærk: Du skal ikke bekymre dig om farvekoden nu, de vigtige for dig vil være på din tunge, gradvist.

Advarsel: Din terminal har muligvis ikke mulighed for at blinke.

 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: Krypter en fil/bibliotek

Dette script krypterer en fil (husk? Bibliotek/driver /…. Alt behandles som fil i Linux). Den nuværende begrænsning af ovenstående script er, at det ikke understøtter automatisk udfyldelse af navn ved hjælp af TAB. Desuden skal du placere scriptet og filen, der skal krypteres, i den samme mappe. Du skal muligvis installere “pinentry-gui” ved hjælp af yum eller apt pakken, hvis det kræves.

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

Kreta en fil kaldet "Encrypt.sh" og placer følgende script, gør det eksekverbart og kør det som vist.

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

Eksempel på output

 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: Dette krypterer din fil ved hjælp af en adgangskode, alias adgangskode. I denne læringsproces ville du aldrig have troet, at den egentlige læringsproces kunne være så meget let. Så efter kryptering af en fil, hvad du har brug for? Naturligvis! dekryptering af filen. Og jeg vil have dig - den lærende, læseren til at skrive dekrypteringsscriptet selv, rolig, jeg efterlader dig ikke i midten, jeg vil bare have dig til at få noget ud af denne artikel.

Bemærk: gpg -d filnavn.gpg> filnavn er det, du skal implementere i dit dekrypteringsscript. Du kan sende dit script i kommentar, hvis det lykkes, hvis ikke kan du bede mig om at skrive det til dig.

Script 4: Kontrol af serverudnyttelse

Kontrol af serverudnyttelsen er en af administratorens vigtige opgaver, og en god administrator er en, der ved, hvordan man automatiserer sin daglige opgave. Nedenfor er scriptet, der giver mange sådanne oplysninger om din server. Tjek det selv.

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

Bemærk: Jeg har givet dig scriptet, der giver output i selve terminalen, hvad med at få output i en fil til fremtidig reference. Implementere det ved hjælp af omdirigeringsoperator.

  1. ‘>‘: omdirigeringsoperatøren forårsager en filoprettelse, og hvis den findes, overskrives indholdet.
  2. ‘>>‘: Når du bruger >>, tilføjer du oplysninger i stedet for at erstatte dem.
  3. ‘>>‘ er sikkert sammenlignet med ‘>‘

Script 5: Kontroller diskplads og sender en e-mail-alarm

Hvad med at få en e-mail, når diskbrug i partition PART er større end maksimalt tilladt, det er et livreddende script til webadministratorer med lille ændring.

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

Bemærk: Fjern “USER” med dit brugernavn. Du kan kontrollere mail ved hjælp af kommandoen ‘mail’.

Scriptskrivning og programmering er uden for grænserne, alt og alt kan implementeres efter behov. Det er alt for nu. I min næste artikel vil jeg give jer nogle forskellige varianter af scripting. Indtil da forbliver kølig og tunet, nyd.