Wyszukiwanie w witrynie

5 skryptów powłoki dla początkujących użytkowników Linuksa do nauki programowania w powłoce — część II


Aby się czegoś nauczyć, trzeba to zrobić, bez obawy, że się nie uda. Wierzę w praktyczność i dlatego będę Ci towarzyszyć w praktycznym świecie Języka Skryptowego.

Ten artykuł jest rozwinięciem naszego pierwszego artykułu Zrozumienie powłoki systemu Linux i podstawowych skryptów powłoki — część I, w którym przedstawiliśmy przedsmak skryptowania, zapewniając jednocześnie, że tym artykułem Cię nie zawiedziemy.

Skrypt 1: Rysowanie specjalnego wzoru

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

Większość powyższych „słów kluczowych” jest Ci znana i większość z nich nie wymaga objaśnień. np. MAX ustawia maksymalną wartość zmiennej, ponieważ jest to pętla i wszystko w pętli jest wykonywane wielokrotnie, aż pętla będzie ważna dla danej wartości wejściowej.

Przykładowe wyjście
[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

Jeśli masz choć trochę wiedzy na temat dowolnego języka programowania, nauczenie się powyższego skryptu nie będzie trudne, nawet jeśli jesteś nowy w obliczeniach, programowaniu i Linuksie, nie będzie to zbyt trudne.

Pobierz plik Special_Pattern.sh

Skrypt 2: Tworzenie kolorowego skryptu

Kto powiedział, że Linux jest bezbarwny i nudny, zapisz poniższe kody w dowolnej [kropce] sh, uczyń go wykonywalnym i uruchom, nie Nie zapomnij opowiedzieć jak było. Pomyśl co możesz osiągnąć wdrażając to gdzieś.

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

Uwaga: nie przejmuj się teraz kodem koloru, ważne dla Ciebie informacje będą stopniowo pojawiać się na Twoim języku.

Ostrzeżenie: Twój terminal może nie mieć funkcji migania.

Przykładowe wyjście
[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

Pobierz Colourfull.sh

Skrypt 3: Zaszyfruj plik/katalog

Ten skrypt zaszyfruje plik (pamiętasz? katalog/sterownik/…. wszystko jest traktowane jako plik, w Linuksie ). Obecne ograniczenie powyższego skryptu polega na tym, że nie obsługuje on automatycznego uzupełniania nazwy przy użyciu TAB. Ponadto musisz umieścić skrypt i plik do zaszyfrowania w tym samym folderze. Może być konieczne zainstalowanie „pinentry-gui” za pomocą pakietu yum lub apt, jeśli jest to wymagane.

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

Utwórz plik o nazwie „Encrypt.sh” i umieść poniższy skrypt, nadaj mu charakter wykonywalny i uruchom go, jak pokazano.

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

Przykładowe wyjście

[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: zaszyfruje Twój plik przy użyciu klucza, czyli hasła. W tym procesie uczenia się nigdy byś nie pomyślał, że faktyczny proces uczenia się może być tak łatwy. Czego więc potrzebujesz po zaszyfrowaniu pliku? Oczywiście! odszyfrowanie pliku. I chcę, żebyś ty – uczeń, czytelnik, sam napisał skrypt deszyfrujący, nie martw się, nie zostawię cię w środku, chcę tylko, żebyś coś zyskał z tego artykułu.

Uwaga: gpg -d nazwapliku.gpg > nazwa pliku jest tym, co musisz zaimplementować w swoim skrypcie deszyfrującym. Jeśli się powiedzie, możesz opublikować swój skrypt w komentarzu, jeśli nie, możesz poprosić mnie o napisanie go za Ciebie.

Pobierz Encrypt.sh

Skrypt 4: Sprawdzanie wykorzystania serwera

Sprawdzanie wykorzystania serwera jest jednym z ważnych zadań administratora, a dobry administrator to taki, który wie, jak zautomatyzować swoje codzienne zadania. Poniżej znajduje się skrypt, który poda wiele takich informacji o Twoim serwerze. Sprawdź to sam.

#!/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
Przykładowe wyjście
[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

Uwaga: dałem ci skrypt, który wyświetla dane wyjściowe w samym terminalu, a może chcesz pobrać dane wyjściowe w pliku do wykorzystania w przyszłości. Zaimplementuj go za pomocą operatora przekierowania.

  1. >”: operator przekierowania powoduje utworzenie pliku, a jeśli plik istnieje, jego zawartość zostaje nadpisana.
  2. >>”: kiedy używasz >>, dodajesz informacje, zamiast je zastępować.
  3. >>” jest bezpieczny w porównaniu do „>

Pobierz Server-Health.sh

Skrypt 5: Sprawdź miejsce na dysku i wysyła powiadomienie e-mailem

Co powiesz na otrzymanie wiadomości e-mail, gdy użycie dysku w partycji PART będzie większe niż dozwolone maksimum? Jest to skrypt ratujący życie administratorom sieci po niewielkich modyfikacjach.

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

Uwaga: usuń „USER” ze swoją nazwą użytkownika. Pocztę możesz sprawdzić za pomocą polecenia „mail”.

Pobierz Check-Disk-Space.sh

Pisanie skryptów i programowanie wykracza poza granice, wszystko i wszystko może zostać zaimplementowane zgodnie z wymaganiami. Na razie to wszystko. W następnym artykule przedstawię różne wersje skryptów. Do tego czasu bądź spokojny i nastrojony, ciesz się.