Linux'a Yeni Başlayanların Shell Programlamayı Öğrenmesi için 5 Shell Komut Dosyası - Bölüm II


Bir şeyi öğrenmek için onu başarısız olma korkusu olmadan yapmalısınız. Pratikliğe inanıyorum ve bu nedenle Komut Dosyası Dilinin pratik dünyasında size eşlik edeceğim.

Bu makale, Linux Kabuğu ve Temel Kabuk Komut Dosyalarını Anlamak - Bölüm I adlı ilk makalemizin bir uzantısıdır; burada size Komut Dosyalarının tadına bakacağız ve bu makalede sizi hayal kırıklığına uğratmayacağımızı devam ettireceğiz.

Senaryo 1: Özel Bir Desen Çizmek

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

Yukarıdaki "anahtar kelimelerin" çoğu sizin tarafınızdan bilinmektedir ve bunların çoğu kendi kendini açıklayıcı niteliktedir. örneğin, MAX değişkenin maksimum değerini ayarlar; for bir döngüdür ve döngü içindeki herhangi bir şey, döngü verilen giriş değeri için geçerli olana kadar tekrar tekrar çalıştırılır.

Örnek Çıktı
[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

Herhangi bir programlama dili hakkında biraz bilginiz varsa, yukarıdaki betiği öğrenmek zor değildir; hesaplama, programlama ve Linux konusunda yeni olsanız bile, çok da zor olmayacaktır.

Special_Pattern.sh'yi indirin

Komut Dosyası 2: Renkli Komut Dosyası Oluşturma

Kim Linux'un renksiz ve sıkıcı olduğunu söylerse, aşağıdaki kodları herhangi bir [nokta] sh'ye kaydedin, yürütülebilir hale getirin ve Çalıştırın, yapma. Nasıl olduğunu bana anlatmayı unutma, Bir yere uygulayarak neler başarabileceğini düşün.

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

Not: Artık renk kodunu dert etmeyin, sizin için önemli olanlar yavaş yavaş dilinizin altında olacak.

Uyarı: Terminalinizin yanıp sönme özelliği olmayabilir.

Örnek Çıktı
[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

Colourful.sh'yi indirin

Komut Dosyası 3: Dosya/Dizin Şifrele

Bu komut dosyası bir dosya'yı şifreleyecektir (hatırladınız mı? dizin/sürücü/.... Linux 'ta her şey dosya olarak kabul edilir. ). Yukarıdaki komut dosyasının mevcut sınırlaması, adın TAB kullanılarak otomatik olarak tamamlanmasını desteklememesidir. Üstelik script ile şifrelenecek dosyayı aynı klasöre yerleştirmeniz gerekiyor. Gerekirse yum veya apt paketini kullanarak “pinentry-gui”yi yüklemeniz gerekebilir.

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

Encrypt.sh” isimli bir dosya oluşturun ve aşağıdaki scripti yerleştirin, yürütülebilir hale getirin ve gösterildiği gibi çalıştırın.

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

Örnek Çıktı

[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 : Bu, şifre olarak da bilinen bir şifre kullanarak dosyanızı şifreler. Bu öğrenme sürecinde gerçek öğrenme sürecinin bu kadar kolay olabileceğini asla düşünmezdiniz. Peki bir dosyayı şifreledikten sonra neye ihtiyacınız var? Açıkça! dosyanın şifresini çözmek. Ve ben sizin, öğrencinin, okuyucunun şifre çözme senaryosunu kendisinin yazmasını istiyorum, endişelenmeyin, sizi ortada bırakmıyorum, sadece bu makaleden bir şeyler kazanmanızı istiyorum.

Not: gpg -d dosyaadı.gpg > dosyaadı, şifre çözme komut dosyanızda uygulamanız gereken şeydir. Başarılı olursanız senaryonuzu yoruma gönderebilirsiniz, eğer başarılı olamazsanız sizin için yazmamı isteyebilirsiniz.

Encrypt.sh'yi indirin

Komut Dosyası 4: Sunucu Kullanımını Kontrol Etme

Sunucu kullanımını kontrol etmek bir yöneticinin önemli görevlerinden biridir ve iyi bir yönetici, günlük görevlerini nasıl otomatikleştireceğini bilen kişidir. Aşağıda sunucunuz hakkında bu gibi birçok bilgiyi verecek olan script bulunmaktadır. Kendiniz kontrol edin.

#!/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
Örnek Çıktı
[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

Not: Size terminalin kendisinde çıktı veren komut dosyasını verdim, ileride başvurmak üzere çıktıyı bir dosyaya almaya ne dersiniz? Yönlendirme operatörünü kullanarak uygulayın.

  1. '>' : yeniden yönlendirme operatörü bir dosya oluşturulmasına neden olur ve eğer mevcutsa içeriğin üzerine yazılır.
  2. >>‘ : >> kullandığınızda, bilgiyi değiştirmek yerine bilgi eklersiniz.
  3. '>>', '>' ile karşılaştırıldığında güvenlidir

Server-Health.sh'yi indirin

Komut Dosyası 5: Disk Alanını Kontrol Edin ve Bir E-posta Uyarısı Gönderin

PART bölümündeki disk kullanımı izin verilen maksimum değerden büyük olduğunda bir e-posta almaya ne dersiniz? Bu, çok az değişiklikle web yöneticileri için hayat kurtaran bir komut dosyasıdır.

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

Not: Kullanıcı adınızla birlikte “USER” ifadesini kaldırın. ‘mail’ komutunu kullanarak postalarınızı kontrol edebilirsiniz.

Check-Disk-Space.sh'yi indirin

Senaryo yazımı ve programlama sınırların ötesindedir; her şey gerektiği gibi uygulanabilir. Şimdilik bu kadar, bir sonraki yazımda senaryo yazımının farklı tatlarını sizlerle paylaşacağım. O zamana kadar sakin ve bizi izlemeye devam edin, tadını çıkarın.