Vyhledávání na webu

5 skriptů Shell pro nováčky v Linuxu, aby se naučili programování Shell – část II


Abyste se něco naučili, musíte to udělat, aniž byste se museli bát, že neuspějete. Věřím v praktičnost, a proto vás budu provázet praktickým světem skriptovacího jazyka.

Tento článek je rozšířením našeho Prvního článku Pochopte Linux Shell a základní skriptování Shell – část I, kde jsme vám dali ochutnat skriptování a pokračujeme v tom, že vás v tomto článku nezklameme.

Skript 1: Kreslení speciálního vzoru

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

Většinu výše uvedených „klíčových slov“ znáte a většina z nich je samozřejmá. např. MAX nastavuje maximální hodnotu proměnné, for je smyčka a cokoli v rámci smyčky se provádí znovu a znovu, dokud smyčka není platná pro danou hodnotu vstupu.

Ukázkový výstup
[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

Pokud jste trochu obeznámeni s jakýmkoli programovacím jazykem, naučit se výše uvedený skript není obtížné, i když jste nováčci ve výpočtech, programování a Linuxu, nebude to příliš obtížné.

Stáhněte si Special_Pattern.sh

Skript 2: Vytvoření barevného skriptu

Kdo říká: Linux je bezbarvý a nudný, uložte si níže uvedené kódy do čehokoli [tečka] sh, udělejte jej spustitelný a spusťte, ne Nezapomeň mi říct, jaké to bylo, Mysli na to, čeho můžeš dosáhnout, když to někde implementuješ.

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

Poznámka: S barevným kódem si teď hlavu nelámejte. To, co je pro vás důležité, budete mít na jazyku, postupně.

Upozornění: Váš terminál nemusí mít funkci blikání.

Ukázkový výstup
[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

Stáhněte si Colorfull.sh

Skript 3: Šifrování souboru/adresáře

Tento skript zašifruje soubor (pamatujete? adresář/ovladač/…. vše je v Linuxu považováno za soubor >). Současným omezením výše uvedeného skriptu je, že nepodporuje automatické doplňování názvu pomocí TAB. Kromě toho musíte skript a soubor, který chcete zašifrovat, umístit do stejné složky. V případě potřeby budete možná muset nainstalovat „pinentry-gui“ pomocí balíčku yum nebo apt.

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

Vytvořte soubor s názvem „Encrypt.sh“ a umístěte následující skript, udělejte jej spustitelný a spusťte jej podle obrázku.

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

Ukázkový výstup

[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: Toto zašifruje váš soubor pomocí přístupového klíče neboli hesla. V tomto procesu učení by vás nikdy nenapadlo, že skutečný proces učení může být tak snadný. Takže po zašifrování souboru, co potřebujete? Očividně! dešifrování souboru. A chci, abyste vy – student, čtenář, abyste si sami napsali dešifrovací skript, nebojte se, nenechám vás uprostřed, jen chci, abyste z tohoto článku něco získali.

Poznámka: gpg -d název_souboru.gpg > název souboru je to, co musíte implementovat do svého dešifrovacího skriptu. Pokud bude úspěšný, můžete napsat svůj skript do komentáře, pokud ne, můžete mě požádat, abych ho napsal za vás.

Stáhněte si Encrypt.sh

Skript 4: Kontrola využití serveru

Kontrola využití serveru je jedním z důležitých úkolů správce a dobrý správce je ten, kdo ví, jak automatizovat své každodenní úkoly. Níže je skript, který poskytne mnoho takových informací o vašem serveru. Zkontrolujte si to 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
Ukázkový výstup
[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

Poznámka: Dal jsem vám skript, který poskytuje výstup v samotném terminálu, co takhle získat výstup v souboru pro budoucí použití. Implementujte jej pomocí operátoru přesměrování.

  1. >“ : Operátor přesměrování způsobí vytvoření souboru, a pokud existuje, jeho obsah se přepíše.
  2. >>“ : když použijete >>, spíše přidáváte informace, než je nahrazujete.
  3. >>“ je v porovnání s „>“ bezpečný

Stáhněte si Server-Health.sh

Skript 5: Kontrola místa na disku a odeslání e-mailového upozornění

Co takhle dostat e-mail, když je využití disku v oddílu PART větší než povolené maximum, je to záchranný skript pro správce webu s malými úpravami.

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

Poznámka: Odeberte „USER“ se svým uživatelským jménem. Poštu můžete zkontrolovat pomocí příkazu „mail“.

Stáhněte si Check-Disk-Space.sh

Psaní skriptů a programování je za hranicemi, cokoliv a všechno lze implementovat podle potřeby. To je pro tuto chvíli vše, v mém dalším článku vám dám různé varianty skriptování. Do té doby zůstaňte v pohodě a naladěni, užívejte si.