Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

เคล็ดลับการเขียนสคริปต์ Linux Shell/Bash ของ LinuxScrew

ต่อไปนี้คือเคล็ดลับที่มีประโยชน์บางประการที่คุณควรคำนึงถึงเมื่อเขียนเชลล์สคริปต์ใน 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 ว่างเปล่าหลังจากอ่านแล้ว ค่าเริ่มต้นจะถูกตั้งค่า

แสดงความคิดเห็นมากมาย

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

พิมพ์ พิมพ์ พิมพ์

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

ปล่อยสถานะออก

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