آموزش‌های خط فرمانی

این وبلاگ تلاش می‌کند گامی در حد بضاعت در جهت آموزش خط فرمان و اسکریپت‌نویسی پوسته گنو-لینوکس بردارد.

آموزش‌های خط فرمانی

این وبلاگ تلاش می‌کند گامی در حد بضاعت در جهت آموزش خط فرمان و اسکریپت‌نویسی پوسته گنو-لینوکس بردارد.

نقل‌قول‌ها


در بسیاری از زبانها، نقل‌قول‌ها اساساً برای مشخص نمودن آنکه متن محصور بین آنها به عنوان یک نوع دادهِ رشته‌ای تفسیر گردد، به کار می‌روند، اما در برنامه‌نویسی پوسته، تقریباً همه چیز یک رشته است، بنابراین نقل‌قول در پوسته اثرات و مقاصد بسیار متفاوتی دارد. چند نوع نقل‌قول وجود دارد که اصولاً روشهای متفاوتی از تفسیر محتویاتشان را فعال می‌کنند. متأسفانه، غالباً یادگیری قواعد آن برای نوآموزان دشوار است و در اِزای چند حالت ویژه و استثناهایی برای به خاطر سپردن، رفتارشان با متن تغییر می‌کند. همچنین متأسفانه، نقل‌قول در برنامه‌نویسی پوسته بینهایت اهمیت دارد. از مواردی است که شخص نمی‌تواند از یادگیری آن اجتناب کند. نقل‌قول نادرست در پوسته یکی از رایج‌ترین منابع باگهای اسکریپت‌نویسی و مسائل امنیتی می‌باشد. خوشبختانه، اکثر اوقات انجام درست آن با پیروی از چند راهبرد امکان پذیر است، اما در مورد نقل‌قول حدسی عمل نکنید. وقتی مردد هستید، تست کنید، و صفحه man در مورد چگونه تفسیر شدن نقل‌قولها در یک زمینه مفروض را بخوانید.

ادامه مطلب

globs


"glob"زیرنویس1 نام رایج برای یک مجموعه از ویژگی‌های Bash است که انواع معینی از الگوها را انطباق یا بسط می‌دهد. برخی مترادف‌ها برای globbing (نسبت به مضمونی که در آن ظاهر می‌شود) انطباق الگو، بسط الگو، بسط نام فایل، و مانند آن می‌باشند. یک glob ممکن است مانند ‎*.txt‎ به نظر آید و موقعی که برای انطباق نام فایلها به کار می‌رود، گاهی اوقات یک کاراکتر عام نامیده می‌شود.

globهای سنتی پوسته ترکیب دستوری بسیار ساده‌ای را به کار می‌برند، که نسبت به عبارت منظم کمتر گویا می‌باشند. در یک glob با اکثر کاراکترها به طور لفظی رفتار می‌شود، اما یک کاراکتر * با هیچ یا چند کاراکتر مطابقت می‌کند یک کاراکتر ‎?‎ صریحاً با یک کاراکتر مطابقت می‌کند، و ‎[...]‎ بر هر کاراکتر منفرد در یک مجموعه مشخص شده منطبق می‌گردد ( محدوده‌ها در پایین را ببینید). به طور ضمنی شروع و انتهای تمام globها مهار می‌گردد. برای مثال:

ادامه مطلب

عبارت‌های منظم


عبارت‌های منظم ‎(RE)‎ یک ساختار دانش کامپیوتر می‌باشند، و برای تعیین اینکه آیا یک رشته با برخی انواع الگو مطابقت دارد به کار می‌روند. گونه‌های بیشماری شامل هر دو تنوع دستوری و معنایی وجود دارد. اجازه بدهید با تئوری آغاز کنیم.

Aیک عبارت منظم متشکل از سه ویژگی است:

  1. الحاق. دو عبارت منظم می‌توانند یکی پس از دیگری نوشته شوند. عبارت بزرگتر حاصل با یک رشته ورودی منطبق خواهد گردید «اگر و فقط اگر» آن قسمت از رشته ورودی که با عبارت کوچکتر اول مطابقت دارد بلافاصله با قسمتی که با عبارت کوچک دوم مطابقت می‌نماید، دنبال شود.

  2. اتحاد. این به طور اساسی یک عملگر «یا» می‌باشد. اگر یکی از عبارتهای کوچکتر با ورودی منطبق گردد، عبارت بزرگتر با ورودی منطبق خواهد شد.

  3. Closure. که ‎"Kleene closure"‎ (کلی-نی تلفظ شده)نیز نامیده می‌شود. عبارت کوچک می‌تواند صفر یا چند بار به منظور انظباق با ورودی تکرار گردد.

(من در اینجا مشغول استفاده از زبان ریاضی نیستم. اگر شما تعاریف رسمی را نیاز دارید، لطفاً به جای این یک کتاب درسی دانش کامپیوتر را ملاحظه نمایید.)

ادامه مطلب

جایگزینی پردازش


جایگزینی پردازش

جایگزینی پردازش یک توسعه بسیار سودمند BASH است. مشابه ‎"command" | getline‎ در awk می‌باشد و بخصوص برای کنار گذاشتن پوسته‌های فرعی معلول خط‌لوله‌ها اهمیت دارد.

جایگزینی پردازش در دو شکل ظاهر می‌شود: ‎<(some command)‎ و ‎>(some command)‎. هر کدام نسبت به سیستم عامل، باعث می‌شوند یا یک FIFO در ‎/tmp‎ یا ‎/var/tmp‎ ایجاد بشود، یا یک دستگاه ویژه توصیف‌گر فایل (‎/dev/fd/*‎)، استفاده بشود. ترکیب دستوری جایگزینی توسط نام FIFO یا FD تعویض می‌گردد، وفرمان داخل آن در پس‌زمینه اجرا می‌گردد. جایگزینی در همان مرحله بسط پارامتر و جایگزینی فرمان انجام می‌شود.

یکی از رایج‌ترین موارد استفاده این ویژگی برای پرهیز از ایجاد فایلهای موقتی است، به عنوان مثال، موقع کاربرد ‎diff(1)‎:

ادامه مطلب

جایگزینی فرمان


جایگزینی فرمان

جایگزینی فرمان یک راهکار بسیار نیرومند پوسته یونیکس است. برای درج خروجی یک فرمان در فرمان دیگر به کار می‌رود. به عنوان مثال، با یک تخصیص:

  $ today=$(date)        #  شروع می‌شود و خروجی‌اش  ضبط می‌شود "date" فرمان‎
  $ echo "$today"
  Mon Jul 26 13:16:02 MEST 2004

این مورد همچنین می‌تواند با فرمانهایی علاوه بر تخصیص‌ها، استفاده شود:

  $ echo "Today is $(date +%A), it's $(date +%H:%M)"
  Today is Monday, it's 13:21

این سطر فرمان، برنامه date را دو بار فراخوانی می‌کند، دفعه اول برای چاپ روز هفته، دفعه دوم برای زمان فعلی.

ادامه مطلب