ค้นหาเว็บไซต์

10 เคล็ดลับที่เป็นประโยชน์สำหรับการเขียนสคริปต์ Bash ที่มีประสิทธิภาพใน Linux


Shell Scripting เป็นรูปแบบการเขียนโปรแกรมที่ง่ายที่สุดที่คุณสามารถเรียนรู้/ทำได้ใน Linux ยิ่งไปกว่านั้น ยังเป็นทักษะที่จำเป็นสำหรับการบริหารระบบสำหรับงานอัตโนมัติ การพัฒนายูทิลิตี้/เครื่องมือง่ายๆ ใหม่ ๆ เพียงไม่กี่อย่าง

ในบทความนี้ เราจะแบ่งปันเคล็ดลับที่เป็นประโยชน์และใช้งานได้จริง 10 ข้อในการเขียนสคริปต์ทุบตีที่มีประสิทธิภาพและเชื่อถือได้ ซึ่งได้แก่:

1. ใช้ความคิดเห็นในสคริปต์เสมอ

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

สำหรับผู้เริ่มต้น ความคิดเห็นจะถูกกำหนดโดยใช้เครื่องหมาย #

#TecMint is the best site for all kind of Linux articles

2. ทำให้สคริปต์ออกเมื่อล้มเหลว

บางครั้ง bash อาจดำเนินการสคริปต์ต่อไปแม้ว่าคำสั่งบางอย่างจะล้มเหลว ซึ่งส่งผลต่อส่วนที่เหลือของสคริปต์ (ในที่สุดอาจส่งผลให้เกิดข้อผิดพลาดเชิงตรรกะ) ใช้บรรทัดด้านล่างเพื่อออกจากสคริปต์เมื่อคำสั่งล้มเหลว:

#let script exit if a command fails
set -o errexit 
OR
set -e

3. ทำให้สคริปต์ออกเมื่อ Bash ใช้ตัวแปรที่ไม่ได้ประกาศ

Bash อาจพยายามใช้สคริปต์ที่ไม่ได้ประกาศซึ่งอาจทำให้เกิดข้อผิดพลาดเชิงตรรกะ ดังนั้นให้ใช้บรรทัดต่อไปนี้เพื่อสั่งให้ bash ออกจากสคริปต์เมื่อพยายามใช้ตัวแปรที่ไม่ได้ประกาศ:

#let script exit if an unsed variable is used
set -o nounset
OR
set -u

4. ใช้เครื่องหมายคำพูดคู่เพื่ออ้างอิงตัวแปร

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

ลองดูตัวอย่างด้านล่าง:

#!/bin/bash
#let script exit if a command fails
set -o errexit 

#let script exit if an unsed variable is used
set -o nounset

echo "Names without double quotes" 
echo
names="Tecmint FOSSMint Linusay"
for name in $names; do
        echo "$name"
done
echo

echo "Names with double quotes" 
echo
for name in "$names"; do
        echo "$name"
done

exit 0

บันทึกไฟล์และออก จากนั้นรันดังนี้:

./names.sh

5. ใช้ฟังก์ชั่นในสคริปต์

ยกเว้นสคริปต์ที่มีขนาดเล็กมาก (มีโค้ดไม่กี่บรรทัด) อย่าลืมใช้ฟังก์ชันต่างๆ เพื่อทำให้โค้ดของคุณเป็นโมดูล และทำให้สคริปต์สามารถอ่านและนำกลับมาใช้ใหม่ได้มากขึ้น

ไวยากรณ์สำหรับการเขียนฟังก์ชันมีดังนี้:

function check_root(){
	command1; 
	command2;
}

OR
check_root(){
	command1; 
	command2;
}

สำหรับโค้ดบรรทัดเดียว ให้ใช้อักขระสิ้นสุดหลังแต่ละคำสั่งดังนี้:

check_root(){ command1; command2; }

6. ใช้=แทน == สำหรับการเปรียบเทียบสตริง

โปรดทราบว่า == เป็นคำพ้องสำหรับ = ดังนั้นให้ใช้ = เพียงรายการเดียวสำหรับการเปรียบเทียบสตริง เช่น:

value1=”linux-console.net”
value2=”fossmint.com”
if [ "$value1" = "$value2" ]

7. ใช้ $ (คำสั่ง) แทน 'คำสั่ง' แบบเดิมสำหรับการทดแทน

การทดแทนคำสั่งจะแทนที่คำสั่งด้วยเอาต์พุต ใช้ $ (command) แทน backquotes `command` สำหรับการทดแทนคำสั่ง

แนะนำให้ใช้สิ่งนี้โดยเครื่องมือ Shellcheck (แสดงคำเตือนและคำแนะนำสำหรับเชลล์สคริปต์) ตัวอย่างเช่น:

user=`echo “$UID”`
user=$(echo “$UID”)

8. ใช้อ่านอย่างเดียวเพื่อประกาศตัวแปรคงที่

ตัวแปรคงที่ไม่เปลี่ยนแปลง ค่าของมันไม่สามารถเปลี่ยนแปลงได้เมื่อมีการกำหนดไว้ในสคริปต์:

readonly passwd_file=”/etc/passwd”
readonly group_file=”/etc/group”

9. ใช้ชื่อตัวพิมพ์ใหญ่สำหรับตัวแปรสภาพแวดล้อมและตัวพิมพ์เล็กสำหรับตัวแปรที่กำหนดเอง

ตัวแปรสภาพแวดล้อม bash ทั้งหมดตั้งชื่อด้วยอักษรตัวพิมพ์ใหญ่ ดังนั้นให้ใช้อักษรตัวพิมพ์เล็กเพื่อตั้งชื่อตัวแปรที่คุณกำหนดเองเพื่อหลีกเลี่ยงความขัดแย้งของชื่อตัวแปร:

#define custom variables using lowercase and use uppercase for env variables
nikto_file=”$HOME/Downloads/nikto-master/program/nikto.pl”
perl “$nikto_file” -h  “$1”

10. ทำการดีบักสคริปต์ขนาดยาวเสมอ

หากคุณกำลังเขียนสคริปต์ทุบตีด้วยโค้ดหลายพันบรรทัด การค้นหาข้อผิดพลาดอาจกลายเป็นฝันร้ายได้ หากต้องการแก้ไขสิ่งต่างๆ อย่างง่ายดายก่อนที่จะรันสคริปต์ ให้ทำการดีบักบางอย่าง ฝึกฝนเคล็ดลับนี้โดยอ่านคำแนะนำด้านล่าง:

  1. วิธีเปิดใช้งานโหมดดีบักสคริปต์เชลล์ใน Linux
  2. วิธีดำเนินการตรวจสอบไวยากรณ์โหมดดีบักในเชลล์สคริปต์
  3. วิธีติดตามการดำเนินการคำสั่งในเชลล์สคริปต์ด้วยการติดตามเชลล์

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