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. ทำการดีบักสคริปต์ขนาดยาวเสมอ
หากคุณกำลังเขียนสคริปต์ทุบตีด้วยโค้ดหลายพันบรรทัด การค้นหาข้อผิดพลาดอาจกลายเป็นฝันร้ายได้ หากต้องการแก้ไขสิ่งต่างๆ อย่างง่ายดายก่อนที่จะรันสคริปต์ ให้ทำการดีบักบางอย่าง ฝึกฝนเคล็ดลับนี้โดยอ่านคำแนะนำด้านล่าง:
- วิธีเปิดใช้งานโหมดดีบักสคริปต์เชลล์ใน Linux
- วิธีดำเนินการตรวจสอบไวยากรณ์โหมดดีบักในเชลล์สคริปต์
- วิธีติดตามการดำเนินการคำสั่งในเชลล์สคริปต์ด้วยการติดตามเชลล์
นั่นคือทั้งหมด! คุณมีแนวทางปฏิบัติในการเขียนสคริปต์ทุบตีที่ดีที่สุดอื่น ๆ ที่จะแบ่งปันหรือไม่? หากใช่ ให้ใช้แบบฟอร์มความคิดเห็นด้านล่างเพื่อดำเนินการดังกล่าว