ต่อไปนี้คือเคล็ดลับที่มีประโยชน์บางประการที่คุณควรคำนึงถึงเมื่อเขียนเชลล์สคริปต์ใน Linux
เชลล์สคริปต์เป็นวิธีที่หลากหลายในการทำให้เวิร์กโฟลว์ของคุณเป็นอัตโนมัติใน Linux (และ MacOS และตอนนี้คือ Windows ด้วยระบบย่อย Windows สำหรับ Linux) ไวยากรณ์และการทำงานของสคริปต์ของเชลล์มีนิสัยแปลก ๆ และมีทางลัดที่เป็นประโยชน์ที่คุณสามารถใช้เพื่อทำให้สคริปต์ของคุณง่ายขึ้น
เคล็ดลับการเขียนสคริปต์ทุบตี
เคล็ดลับเหล่านี้รวบรวมจากในอินเทอร์เน็ต โดยบางส่วนมาจากคำแนะนำของฉันเอง
สคริปต์ทุบตีจะทำงานต่อไปแม้ว่าจะมีข้อผิดพลาด!
สิ่งนี้อาจทำให้เกิดปัญหา โดยเฉพาะอย่างยิ่งหากยอมรับอินพุตของผู้ใช้และทำงานกับไฟล์ เพื่อป้องกันพฤติกรรมนี้ให้เพิ่มคำสั่ง set
set -eu
…ไปที่จุดเริ่มต้นของสคริปต์ของคุณ –จ บอกให้สคริปต์ออกจากข้อผิดพลาดและ –u บอกให้สคริปต์ออกหากไม่ได้ตั้งค่าตัวแปร
รวม shebang ไว้ด้วยเสมอ
ใส่ shebang เป็นบรรทัดแรกของสคริปต์เสมอ:
#!/bin/sh
สิ่งนี้จะบอกระบบว่าควรใช้เชลล์ใดในการตีความสคริปต์ และมีความสำคัญต่อความเข้ากันได้ สคริปต์ที่เขียนขึ้นสำหรับ Bash อาจทำงานแตกต่างออกไปเมื่อเรียกใช้ภายใน Zsh แต่การรวม shebang ไว้ด้วย คุณจะมั่นใจได้ว่าสคริปต์จะถูกตีความด้วยเชลล์ที่ถูกต้อง
ไม่เคยใช้ sudo ในสคริปต์ของคุณ
สิ่งนี้ทำให้เกิดความกำกวมหากคุณเรียกใช้สคริปต์ และอาจทำให้เกิดปัญหาเมื่อใช้ไพพ์และการเปลี่ยนเส้นทาง นอกจากนี้ยังเป็นปัญหาด้านความปลอดภัย หากสคริปต์ต้องการสิทธิ์รูท สคริปต์ทั้งหมดควรทำงานเป็นรูทหรือใช้ sudo .
ตรวจสอบว่าสคริปต์กำลังทำงานเป็น root/sudo ในสคริปต์หรือไม่
เพิ่มคำสั่งนี้ที่ส่วนต้นของสคริปต์เพื่อตรวจสอบว่าคำสั่งทำงานโดยใช้สิทธิ์ root/sudo คำสั่งนี้จะทำให้สคริปต์ของคุณล้มเหลวก่อนที่จะพยายามทำอะไร มากกว่าเมื่อคุณพยายามเรียกใช้คำสั่งที่ต้องใช้สิทธิ์ของรูท
# Check if running as root if ((EUID!=0 )); then printf "Please run as root" exit 1 fi
ข้าม apt prompt ด้วย -y
เพิ่ม -y ต่อท้ายคำสั่ง apt เพื่อข้ามพรอมต์และอนุญาตให้สคริปต์ทำงานโดยไม่ต้องป้อนข้อมูลจากผู้ใช้:
sudo apt install nano -y
หรือ
sudo apt upgrade -y
อ้างอิงเส้นทางของคุณ!!!
อ้างอิงเส้นทางของคุณเมื่อเขียนสคริปต์ทุบตี สิ่งสำคัญคือต้องมีบทความทั้งบทความอธิบายเหตุผล
และแก้ไขให้ถูกต้องสำหรับไดเร็กทอรีการทำงานปัจจุบัน
CURR_DIR="$(dirname $0);" printf -- 'moving application to /opt/app.jar'; mv "${CURR_DIR}/application.jar" /opt/app.jar;
ตั้งค่าเริ่มต้นสำหรับตัวแปรจากอินพุตของผู้ใช้
เมื่อพร้อมท์ให้ผู้ใช้ป้อนข้อมูล ค่าเริ่มต้นสามารถตั้งค่าได้โดยใช้สิ่งต่อไปนี้:
echo "Enter a value" read val val=${val:-"Default Value"}
หากตัวแปร val ว่างเปล่าหลังจากอ่านแล้ว ค่าเริ่มต้นจะถูกตั้งค่า
แสดงความคิดเห็นมากมาย
เพื่อประโยชน์ของตัวคุณเองในอนาคต – อธิบายว่าคุณกำลังทำอะไรและทำไมคุณถึงทำอย่างนั้น ความชัดเจนในเจตนาของโค้ดคือการตรวจสอบสุขภาพจิตที่ดีและช่วยในการดีบั๊ก และการแสดงความคิดเห็นอย่างกว้างขวางทำให้ง่ายต่อการกลับไปที่โค้ดของคุณในภายหลัง
พิมพ์ พิมพ์ พิมพ์
พิมพ์ข้อมูลไปยังคอนโซลให้มากที่สุดเท่าที่จะทำได้ เพื่อที่ว่าหากสคริปต์ของคุณขัดข้อง คุณจะรู้ว่าที่ไหน มันพัง สคริปต์ทุบตีโดยค่าเริ่มต้นไม่จำเป็นต้องละเอียด
ปล่อยสถานะออก
หากสคริปต์ของคุณพบข้อผิดพลาด ตรวจสอบให้แน่ใจว่าสคริปต์ออกด้วยรหัสทางออกที่เหมาะสม เพื่อให้สคริปต์อื่นๆ ที่อาจเรียกสคริปต์นั้นสามารถตอบสนองได้อย่างเหมาะสม