การเขียนสคริปต์เชลล์เป็นรูปแบบการเขียนโปรแกรมที่ง่ายที่สุดที่คุณสามารถเรียนรู้/ทำได้ใน Linux ยิ่งไปกว่านั้น มันเป็นทักษะที่จำเป็นสำหรับการบริหารระบบ เพื่อทำงานอัตโนมัติ พัฒนาเครื่องมือ/ยูทิลิตี้ง่ายๆ เพียงแค่กล่าวถึงบ้าง
ในบทความนี้ เราจะแชร์ 10 เคล็ดลับที่มีประโยชน์และเป็นปฏิบัติจริงสำหรับการเขียนสคริปต์ Bash ที่มีประสิทธิภาพและน่าเชื่อถือ ซึ่งรวมถึง:
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. ใช้เครื่องหมายคำพูดคู่เพื่ออ้างอิงตัวแปร
การใช้เครื่องหมายคำพูดคู่ขณะอ้างอิง (ใช้ค่าของตัวแปร) ช่วยป้องกันการแยกคำ (word splitting) (เกี่ยวกับช่องว่าง) และการขยายวাইলด์การ์ด (globbing) ที่ไม่จำเป็น
ตรวจสอบตัวอย่างด้านล่าง:
#!/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;
}
สำหรับโค้ดบรรทัดเดียว ให้ใช้ตัวอักษรสิ้นสุดหลังแต่ละคำสั่ง nhưนี้:
check_root(){ command1; command2; }
6. ใช้ = แทน == สำหรับการเปรียบเทียบสตริง
โปรดทราบว่า == เป็นคำพ้องความหมายของ = ดังนั้น ให้ใช้ = เพียงตัวเดียวสำหรับการเปรียบเทียบสตริง เช่น:
value1="tecmint.com" value2="fossmint.com" if [ "$value1" = "$value2" ]
7. ใช้ $(command) แทน backquotes `command` แบบเก่าสำหรับการแทนที่
การแทนที่คำสั่ง (Command substitution) แทนที่คำสั่งด้วยผลลัพธ์ของมัน ให้ใช้ $(command) แทน backquotes `command` สำหรับการแทนที่คำสั่ง
สิ่งนี้ได้รับแนะนำแม้จากเครื่องมือ shellcheck (แสดงคำเตือนและข้อเสนอแนะสำหรับสคริปต์เชลล์) ตัวอย่าง:
user=`echo "$UID"` user=$(echo "$UID")
8. ใช้ Read-only เพื่อประกาศตัวแปรคงที่
ตัวแปรคงที่ (static variable) ไม่เปลี่ยนแปลง ค่าของมันไม่สามารถเปลี่ยนแปลงได้หลังจากที่ถูกกำหนดในสคริปต์:
readonly passwd_file="/etc/passwd" readonly group_file="/etc/group"
9. ใช้ชื่อตัวพิมพ์ใหญ่สำหรับตัวแปร ENVIRONMENT และตัวพิมพ์เล็กสำหรับตัวแปรกำหนดเอง
ตัวแปรสภาพแวดล้อม 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. ทำการดีบักเสมอสำหรับสคริปต์ยาว
หากคุณกำลังเขียนสคริปต์ Bash ที่มีพันๆ บรรทัดของโค้ด การหาข้อผิดพลาดอาจกลายเป็นปัญหาใหญ่ เพื่อแก้ไขสิ่งต่างๆ ให้ง่ายก่อนรันสคริปต์ ให้ทำการดีบักบางอย่าง เรียนรู้เคล็ดลับนี้โดยอ่านคู่มือที่ให้ไว้ด้านล่าง:
- วิธีเปิดใช้งานโหมดดีบักสคริปต์เชลล์ใน Linux
- วิธีดำเนินการตรวจสอบไวยากรณ์โหมดดีบักในสคริปต์เชลล์
- วิธีติดตามการรันคำสั่งในสคริปต์เชลล์ด้วย Shell Tracing
ขอจบเพียงเท่านี้! คุณมีแนวทางปฏิบัติที่ดีที่สุดสำหรับการเขียนสคริปต์ Bash อื่นๆ ที่จะแบ่งปันไหม? หากมี ให้ใช้แบบฟอร์มความคิดเห็นด้านล่างเพื่อทำได้ครับ