چرا از این قالببندی اسکریپت شل استفاده کنیم
- قالببندی فوری برای POSIX sh، Bash، mksh و شلهای مرتبط
- قوانین سبک shfmt برای تورفتگی، فاصلهگذاری و بلوکهای case/esac
- طراحی شده برای پشتیبانی از گزینههایی مانند اندازه تورفتگی، تب در مقابل فاصله و فاصلهگذاری تغییر مسیر
- کد خام را جایگذاری کنید یا فایلهای `.sh`، `.bash`، `.ksh`، `.mksh` یا `.bats` را آپلود کنید
- همراه ایدهآل برای خطوط لوله CI/CD، entrypointهای داکر و dotfileها
- قالببندی شده از طریق بکاند امن با منطق سبک shfmt - بدون نیاز به نصب محلی
- کپی یککلیک یا دانلود اسکریپت تمیز شده
🛠️ چگونه اسکریپتهای شل خود را آنلاین قالببندی کنید for shell-script-formatter
1. اسکریپت خود را جایگذاری یا آپلود کنید
📥 کد شل خود را در ویرایشگر جایگذاری کنید، یا یک فایل `.sh`، `.bash`، `.ksh`، `.mksh` یا `.bats` را کشیده و رها کنید. هایلایت سینتکس مشاهده ساختار و دستورات را آسان میکند.
2. (اختیاری) تنظیمات پیشرفته را تنظیم کنید
⚙️ اگر پروژه شما از قوانین سبک سفارشی استفاده میکند، هنگام در دسترس بودن در رابط کاربری، تورفتگی یا سایر گزینههای پیشرفته را تنظیم کنید. در غیر این صورت، پروفایل پیشفرض از قبل با روشهای متداول shfmt مطابقت دارد.
3. اسکریپت خود را قالببندی کنید
✨ روی **قالببندی** کلیک کنید تا اسکریپت شما به API قالببندی امن ارسال شود. این کار تورفتگی، فاصلهگذاری و برخی ساختارها را بازنویسی میکند در حالی که رفتار را حفظ میکند.
4. نتیجه را کپی یا دانلود کنید
📤 اسکریپت قالببندی شده را به ویرایشگر خود بازگردانید، یا آن را به عنوان فایل `.sh` برای git، CI یا استقرار تولید دانلود کنید.
مشخصات فنی
فرمتها و پسوندهای پشتیبانی شده
از گویشهای متداول شل سبک Bourne که در سیستمهای دنیای واقعی با آنها مواجه میشوید پشتیبانی میکند:
| فرمت / گویش | پسوند معمول | توضیحات |
|---|---|---|
| POSIX sh | .sh | اسکریپتهای شل قابل حمل سازگار با /bin/sh |
| Bash | .sh, .bash | اسکریپتها و کمککنندههای تعاملی گنو بش |
| پوسته کورن (ksh) | .ksh | اسکریپتهای پوسته کورن در محیطهای قدیمی |
| mksh | .mksh | اسکریپتهای پوسته کورن MirBSD |
| تستهای Bats | .bats | مجموعه تستهای مبتنی بر پوسته با استفاده از Bats |
رفتار قالببندی (سبک shfmt)
قالببند بکاند از قواعد سبک shfmt برای چیدمان یکنواخت پوسته پیروی میکند.
| جنبه | رفتار | مزیت |
|---|---|---|
| تورفتگی | تورفتگی را در `if`، `for`، `while`، `case`، توابع و زیرپوستهها نرمال میکند | تجزیه بصری جریان کنترل و تودرتویی آسانتر میشود. |
| فاصلهگذاری | در انتسابها اطراف `=` و در اپراتورهای دودویی در جای مناسب فاصله اضافه میکند | کاهش اغتشاش بصری و خطاهای تجزیه تصادفی. |
| تغییرمسیرها | از فاصلهگذاری اطراف `>`، `>>`، `<` مطابق با قراردادهای سبک shfmt پشتیبانی میکند | خوانایی تغییرمسیرهای فایل بهبود مییابد. |
| بلوکهای case | `case`، شاخههای الگو و `esac` را به طور یکنواخت تراز میکند | از دستورات case تو در تو یا فشرده جلوگیری میکند. |
| خروجی idempotent | اجرای مجدد قالببند نتیجه یکسانی میدهد | امکان ادغام ایمن در هوکهای pre-commit و CI را فراهم میکند. |
محدودیتها و اندازه ورودی
طراحی شده تا حتی روی اسکریپتهای غیرساده نیز سریع و قابل پیشبینی باشد.
| پارامتر | محدودیت / رفتار | یادداشتها |
|---|---|---|
| حداکثر اندازه ورودی (متن) | ≈ ۲ مگابایت | اسکریپتهای بزرگتر از این بهتر است به صورت محلی با shfmt قالببندی شوند. |
| حداکثر اندازه فایل (آپلود) | ≈ ۵ مگابایت | ایدهآل برای اکثر اسکریپتهای استقرار و مجموعههای ابزار. |
| رمزگذاری | UTF-8 توصیه میشود | رمزگذاریهای قدیمی مانند ISO-8859-1 را قبل از قالببندی تبدیل کنید. |
مدل اجرا
قالببند از طریق یک بکاند امن با استفاده از منطق سبک shfmt اجرا میشود.
| جنبه | رفتار | یادداشتها |
|---|---|---|
| انتقال | تماس HTTPS به نقطه پایانی `/api/shell-script-formatter` | از استراق سمع هنگام قالببندی اسکریپت شما جلوگیری میکند. |
| زمانبندی | حدود ۲۵ ثانیه برای هر درخواست | از اجرای بیپایان کارها روی ورودیهای بسیار بزرگ یا مشکلساز جلوگیری میکند. |
| معناشناسی | فقط فاصلهگذاری و چیدمان | منطق اسکریپت شما حفظ میشود؛ فقط قالببندی تغییر میکند. |
معادل CLI با shfmt
میخواهید همین رفتار را در ترمینال یا خط لوله CI خود داشته باشید؟ مستقیماً از `shfmt` استفاده کنید:
لینوکس / 🍎 مکاواس / 🪟 ویندوز (از طریق WSL یا Go)
نصب shfmt با استفاده از Go
go install mvdan.cc/sh/v3/cmd/shfmt@latestفایل باینری `shfmt` را در دایرکتوری bin مربوط به Go شما نصب میکند (مثلاً `~/go/bin`).
قالببندی یک فایل شل با تورفتگی ۲ فاصله
shfmt -i 2 -w script.shفایل `script.sh` را با خروجی قالببندی شده یکنواخت بازنویسی میکند.
قالببندی و چاپ در stdout
shfmt -i 4 script.shاز تورفتگی ۴ فاصله استفاده کرده و بدون تغییر فایل، در stdout چاپ میکند.
بررسی قالببندی در CI (بدون تغییرات)
shfmt -d scripts/تفاوتهای فایلهایی که نیاز به قالببندی مجدد دارند را نشان میدهد؛ در صورت نیاز به تغییرات، با کد غیر صفر خاتمه مییابد.
موارد استفاده عملی برای قالببندی شل
DevOps و خطوط لوله CI/CD
اسکریپتهای حیاتی را قابل خواندن، قابل بازبینی و ایمن برای تولید نگه دارید.
- پاکسازی اسکریپتهای استقرار و بازگشت قبل از ادغام در `main`.
- یکسانسازی هوکها در `.git/hooks`، `scripts/` و کمککنندههای CI.
- قالببندی نقطه ورود داکر و اسکریپتهای راهاندازی کانتینر.
shfmt -i 2 -w ./scripts/deploy.shshfmt -i 2 -w ./scripts/*.shهمکاری تیمی و متنباز
از بحثهای مربوط به سبک اجتناب کرده و در بازبینیها روی منطق تمرکز کنید.
- اعمال یک سبک واحد در تمام اسکریپتهای شل مشارکتکنندگان.
- تسهیل فرآیند پیوستن با مرتب نگه داشتن فایلهای نقطهای و کمککنندهها.
- کاهش تفاوتهای پرسر و صدا با استانداردسازی تورفتگی و فاصلهگذاری.
shfmt -w hooks/*.shshfmt -i 2 -ci -bn -w .یادگیری و آموزش اسکریپتنویسی شل
نمایش بهترین روشها به دانشجویان و توسعهدهندگان تازهکار.
- پاکسازی مثالها قبل از قرار دادن در اسلایدها یا مستندات.
- قالببندی خودکار ارسالهای دانشجویی برای تمرکز بازخورد بر معناشناسی.
- نشان دادن چگونگی تأثیر چیدمان بر خوانایی و تشخیص خطا.
❓ Frequently Asked Questions
🔍shfmt چیست؟
⚙️آیا میتوانم تعداد فاصلههای تورفتگی را انتخاب کنم؟
🚫آیا این ابزار وب فایل من را بازنویسی میکند؟
💬آیا سینتکس خاص Bash را درک میکند؟
🔒آیا قالببندی اسکریپتهای حساس در اینجا ایمن است؟
Pro Tips
قبل از هر commit، shfmt را اجرا کنید تا تاریخچه git شما بر تغییرات واقعی متمرکز شود، نه فاصلههای سفید.
`shfmt -d` را با CI ترکیب کنید تا از ادغام زمانی که اسکریپتها به درستی قالببندی نشدهاند جلوگیری کنید.
این فرمتکننده را با ShellCheck جفت کنید تا هم مشکلات سبک و هم منطق در اسکریپتهای شل شما شناسایی شود.
شبنگهای خود (`#!/usr/bin/env bash`) را در تمام اسکریپتها یکسان نگه دارید تا از مشکلات ظریف انتقالپذیری جلوگیری کنید.
Additional Resources
Other Tools
- زیباکننده CSS
- زیباکننده HTML
- زیباکننده JavaScript
- زیباکننده PHP
- انتخابگر رنگ
- استخراجکننده اسپرایت
- دیکودر Base64
- انکودر Base64
- فرمتدهنده C#
- فرمتدهنده CSV
- Dockerfile Formatter
- فرمتدهنده Elm
- فرمتدهنده ENV
- فرمتدهنده Go
- فرمتدهنده GraphQL
- فرمتدهنده HCL
- فرمتدهنده INI
- فرمتدهنده JSON
- فرمتدهنده LaTeX
- فرمتدهنده Markdown
- فرمتدهنده Objective-C
- Php Formatter
- فرمتدهنده Proto
- فرمتدهنده Python
- فرمتدهنده Ruby
- فرمتدهنده Rust
- فرمتدهنده Scala
- فرمتدهنده SQL
- قالببندی SVG
- قالببندی Swift
- قالببندی TOML
- Typescript Formatter
- قالببندی XML
- قالببندی YAML
- قالببندی Yarn
- کوچککننده CSS
- Html Minifier
- Javascript Minifier
- کوچککننده JSON
- کوچککننده XML
- نمایشگر هدرهای HTTP
- PDF به متن
- تستکننده Regex
- بررسیکننده رتبه SERP
- جستجوی Whois