Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญการเขียนโปรแกรมเชลล์: 5 สคริปต์ Bash ที่จำเป็นสำหรับผู้เริ่มต้น Linux – ตอนที่ 2

เพื่อจะได้เรียนรู้สิ่งใดสิ่งหนึ่ง คุณต้องลงมือทำจริง โดยไม่ต้องกลัวความล้มเหลว ผมเชื่อในการปฏิบัติจริง และจะพาคุณเข้าสู่โลกปฏิบัติของภาษาสคริปต์

สคริปต์ที่ 1: การวาดรูปแบบพิเศษ

#!/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, Tecmint.com is always there"

คำสั่ง 'key words' ส่วนใหญ่ข้างต้นคุณคงรู้จักกันดี และส่วนใหญ่อธิบายตัวเองได้ เช่น MAX กำหนดค่าสูงสุดของตัวแปร, for คือลูป และทุกอย่างภายในลูปจะทำงานซ้ำๆ จนกว่าเงื่อนไขจะเป็นเท็จ

ตัวอย่างผลลัพธ์
[admin@wsxdn.com ~]# chmod 755 Special_Pattern.sh
[admin@wsxdn.com ~]# ./Special_Pattern.sh
Enter Number between (5 to 9) : 6
      .
     . .
    . . .
   . . . .
  . . . . .
 . . . . . .
  . . . . .
   . . . .
    . . .
     . .
      .


		 Whenever you need help, Tecmint.com is always there

ถ้าคุณรู้จักภาษาโปรแกรมใดภาษาหนึ่ง การเรียนรู้สคริปต์ข้างต้นไม่ยาก แม้คุณจะเพิ่งเริ่มต้นด้านการคำนวณ การเขียนโปรแกรม และ Linux ก็ไม่ได้ยากมาก

ดาวน์โหลด Special_Pattern.sh

สคริปต์ที่ 2: สร้างสคริปต์สีสัน

ใครบอกว่า Linux ไร้สีและน่าเบื่อ ให้บันทึกโค้ดด้านล่างเป็นไฟล์ [dot] sh ทำให้รันได้ และรันดู แล้วบอกมาว่าอย่างไร คิดดูว่าคุณจะทำได้อะไรบ้างถ้านำไปประยุกต์ใช้

#!/bin/bash
clear
echo -e "\033[1m Hello World" # bold effect
echo -e "\033[5m Blink" # blink effect
echo -e "\033[0m Hello World" # back to normal
echo -e "\033[31m Hello World" # Red color
echo -e "\033[32m Hello World" # Green color
echo -e "\033[33m Hello World" # See remaining on screen
echo -e "\033[34m Hello World"
echo -e "\033[35m Hello World"
echo -e "\033[36m Hello World"
echo -e -n "\033[0m" # back to normal
echo -e "\033[41m Hello World"
echo -e "\033[42m Hello World"
echo -e "\033[43m Hello World"
echo -e "\033[44m Hello World"
echo -e "\033[45m Hello World"
echo -e "\033[46m Hello World"
echo -e "\033[0m Hello World"

หมายเหตุ: อย่ากังวลเกี่ยวกับรหัสสีตอนนี้ สิ่งที่สำคัญจะอยู่ที่ปลายลิ้นของคุณเรื่อยๆ

คำเตือน: เทอร์มินัลของคุณอาจไม่รองรับการกระพริบ

ตัวอย่างผลลัพธ์
[admin@wsxdn.com ~]# chmod 755 Colorfull.sh
[admin@wsxdn.com ~]# ./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
Hello World

ดาวน์โหลด Colorfull.sh

สคริปต์ที่ 3: เข้ารหัสไฟล์/ไดเรกทอรี

สคริปต์นี้จะเข้ารหัส ไฟล์ (จำไว้ไหม? ไดเรกทอรี/ไดรเวอร์/... ทุกอย่างถูกจัดการเป็นไฟล์ใน Linux) ข้อจำกัดปัจจุบันของสคริปต์ข้างต้นคือไม่รองรับการเติมชื่ออัตโนมัติด้วย TAB นอกจากนี้ คุณต้องวางสคริปต์และไฟล์ที่จะเข้ารหัสไว้ในโฟลเดอร์เดียวกัน คุณอาจต้องติดตั้ง "pinentry-gui" โดยใช้ yum หรือ apt หากจำเป็น

[admin@wsxdn.com ~]# yum install pinentry-gui
[admin@wsxdn.com ~]# apt-get install pinentry-gui

สร้างไฟล์ชื่อ "Encrypt.sh" และวางสคริปต์ต่อไปนี้ ทำให้รันได้ และรันตามที่แสดง

#!/bin/bash
echo "Welcome, I am ready to encrypt a file/folder for you"
echo "currently I have a limitation, Place me to the 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

ตัวอย่างผลลัพธ์

[admin@wsxdn.com ~]# chmod 755 Encrypt.sh
[admin@wsxdn.com ~]# ./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

gpg -c : จะเข้ารหัสไฟล์ของคุณโดยใช้พาสคีย์หรือ รหัสผ่าน ในกระบวนการเรียนรู้นี้ คุณจะไม่เคยคิดว่ากระบวนการจริงๆ อาจจะง่ายขนาดนี้ หลังจากเข้ารหัสไฟล์แล้ว คุณต้องการอะไร? แน่นอน! การถอดรหัสไฟล์ และผมอยากให้คุณ – ผู้เรียน ผู้อ่าน – เขียนสคริปต์ถอดรหัสเอง ไม่ต้องกังวล ผมไม่ได้ทิ้งคุณไว้ตรงกลาง ผมแค่อยากให้คุณได้รับประโยชน์จากบทความนี้

หมายเหตุ: gpg -d filename.gpg > filename คือสิ่งที่คุณต้องนำไปใช้ในสคริปต์ถอดรหัส คุณสามารถโพสต์สคริปต์ของคุณในความคิดเห็นได้หากสำเร็จ หากไม่ สามารถขอให้ผมเขียนให้ได้

ดาวน์โหลด Encrypt.sh

สคริปต์ที่ 4: ตรวจสอบการใช้งานเซิร์ฟเวอร์

การตรวจสอบการใช้งานเซิร์ฟเวอร์เป็นหนึ่งในงานสำคัญของผู้ดูแลระบบ และผู้ดูแลที่ดีคือคนที่รู้จักทำให้งานประจำวันเป็นอัตโนมัติ ด้านล่างคือสคริปต์ที่จะให้ข้อมูลมากมายเกี่ยวกับเซิร์ฟเวอร์ของคุณ ลองตรวจสอบด้วยตัวเอง

#!/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
ตัวอย่างผลลัพธ์
[admin@wsxdn.com ~]# chmod 755 Server-Health.sh
[admin@wsxdn.com ~]# ./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 admin@wsxdn.com 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

หมายเหตุ: ผมให้สคริปต์ที่แสดงผลในเทอร์มินัลโดยตรง แล้วถ้าเอาผลลัพธ์ไปเก็บในไฟล์เพื่ออ้างอิงในอนาคต ลองนำไปปฏิบัติด้วยตัวดำเนินการเปลี่ยนทิศทาง

  1. > : ตัวดำเนินการเปลี่ยนทิศทางทำให้สร้างไฟล์ และถ้ามีอยู่แล้ว เนื้อหาจะถูกเขียนทับ
  2. >> : เมื่อใช้ >> คุณกำลังเพิ่มข้อมูล แทนที่จะแทนที่
  3. >> ปลอดภัยกว่า >

ดาวน์โหลด Server-Health.sh

สคริปต์ที่ 5: ตรวจสอบพื้นที่ดิสก์และส่งอีเมลเตือน

จะเป็นอย่างไรถ้าได้รับอีเมลเมื่อการใช้งานดิสก์ในพาร์ติชัน PART มากกว่าค่าสูงสุดที่อนุญาต? เป็นสคริปต์救ชีวิตสำหรับผู้ดูแลเว็บด้วยการปรับแต่งเล็กน้อย

MAX=95
admin@wsxdn.com
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

หมายเหตุ: แทนที่ "USER" ด้วยชื่อผู้ใช้ของคุณ สามารถตรวจสอบเมลได้ด้วยคำสั่ง 'mail'

ดาวน์โหลด Check-Disk-Space.sh

การเขียนสคริปต์และโปรแกรมมิ่งไม่มีขอบเขต อะไรก็ตามสามารถนำไปปฏิบัติได้ตามต้องการ นั่นคือทั้งหมดสำหรับตอนนี้ ในบทความหน้าผมจะนำเสนอรสชาติการสคริปต์ที่แตกต่างกันไป จนกว่าจะพบกันใหม่ ขอให้สบายใจและติดตามกันต่อไป