اسکریپتهای محکمتر و قابل اعتمادتر
بسیاری از اسکریپتهای bash در محیطهای واقعی بهخاطر مدیریت ضعیف خطا شکست میخورند. یک قاعده طلایی این است که هر اسکریپت را با این خط شروع کنید:
#!/usr/bin/env bash
set -euo pipefail
set -e باعث میشود اسکریپت به محض بروز اولین خطا متوقف شود، بهجای ادامه دادن با یک وضعیت
نامعلوم. set -u استفاده از متغیر تعریفنشده را خطا میگیرد، که جلوی باگهای ناشی از تایپی
اسم متغیر را میگیرد. set -o pipefail باعث میشود اگر هرکدام از دستورهای داخل یک pipeline
شکست بخورند، کل pipeline شکستخورده محسوب شود، نه فقط آخرین دستور.
چند تکنیک کاربردی دیگر برای اسکریپتهای production-grade:
› گرفتن آرگومانهای ورودی با نام
while [[ $# -gt 0 ]]; do
case "$1" in
--env) ENV="$2"; shift 2 ;;
--dry-run) DRY_RUN=1; shift ;;
*) echo "آرگومان ناشناخته: $1" >&2; exit 1 ;;
esac
done
› بررسی وجود یک دستور قبل از استفاده
if ! command -v jq &> /dev/null; then
echo "ابزار jq نصب نیست" >&2
exit 1
fi
› استفاده از trap برای پاکسازی همیشگی، حتی در صورت خطا
trap 'rm -f "$TMPFILE"' EXIT
همچنین همیشه متغیرها را داخل گیومه بگذارید ("$var" نه $var) تا از خطاهای
ناشی از فاصله در نام فایل جلوگیری شود. ابزار shellcheck برای بررسی خودکار اشتباهات رایج bash
بسیار توصیه میشود و باید بخشی از فرایند توسعه اسکریپتهای تولیدی باشد.
در نهایت، برای اسکریپتهایی که قرار است توسط چند نفر نگهداری شوند، افزودن لاگگیری ساده به هر مرحله
مهم (مثلاً با یک تابع کوچک log() که پیام را همراه زمان دقیق چاپ میکند) بسیار به عیبیابی
بعدی کمک میکند؛ وقتی یک اسکریپت زمانبندیشده در ساعت سه بامداد شکست میخورد، تنها راه فهمیدن دلیل آن،
همین لاگهای ثبتشده در طول اجراست، نه حدس زدن دوباره منطق اسکریپت.