فصل 1: برنامه‌نویسی پوسته!

 

زبان برنامه‌نویسی کامل وجود ندارد. حتی بهترین زبان مجرد هم وجود ندارد، فقط زبان‌های مناسب یا شاید کمتر مناسب جهت مقاصد خاص وجود دارند.

--Herbert Mayer

برای آنهایی که می‌خواهند به طور قابل‌قبولی در مدیریت سیستم ماهر گردند، حتی اگر پیش‌بینی نمی‌کنند که هرگز بخواهند به طور واقعی یک اسکریپت بنویسند، آگاهی عملی از اسکریپت‌نویسی پوسته ضروری است. در نظر داشته باشید که یک ماشین لینوکس هنگام آغاز به کار، اسکریپت‌های پوسته درون ‎/etc/rc.d‎ را برای بازیابی پیکربندی سیستم و تنظیم سرویس‌ها اجرا می‌نماید. یک فهم مشروح از این اسکریپت‌های راه‌اندازی، برای واکاوی رفتار یک سیستم و ویرایش احتمالی آن اهمیت دارد.

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

در روزهای اولیه کامپیوترهای شخصی، زبان BASIC برای همگان امکان کسب مهارت کامپیوتری قابل‌قبولی جهت نوشتن برنامه‌ روی یک کامپیوتر کوچک نسل اول فراهم نمود. در دهه‌های اخیر زبان اسکریپت‌نویسی Bash هر کسی را قادر می‌سازد با یک دانش اولیه از لینوکس یا یونیکس همان کار را در ماشین‌های مدرن انجام بدهد.

اکنون ما دارای کامپیوترهای کوچک شده بُرد منفردِ (single-board) دارای قابلیت‌های شگفت‌انگیز از قبیل Raspberry Pi هستیم.
اسکریپت‌نویسی Bash روشی برای وارسی و آزمودن امکانات این دستگاه‌های فریبنده فراهم می‌کند.

یک اسکریپت پوسته شیوه سریع و زمخت نمونه‌سازی یک برنامه پیچیده است. حتی بیشتر اوقات فراهم کردن یک زیرمجموعه محدود عوامل جهت کار کردن در یک اسکریپت، مرحله مقدماتی مفیدی در توسعه پروژه است. به این طریق، ساختار برنامه کاربردی می‌تواند بررسی شده و سرهم‌بندی شود، و حفره‌های عمده آن قبل از پیشبرد کد نهایی در C‏، ‎C++‎‏، Java‏، Perl‏، یا Python کشف گردد.

اسکریپت‌نویسی پوسته به فلسفه برجسته UNIX در مورد شکستن پروژه‌های پیچیده به وظایف کوچک ساده‌تر، زنجیر کردن اجزا و برنامه‌ها، گوش فرا می‌دهد. بسیاری اشخاص این شیوه را یک رویکرد مناسب‌تر یا حداقل خوشایندتر در حل مسئله به شمار می‌آورند تا روش زبان‌های نیرومند همه کاره نسل نوین از قبیل Perl که تلاش می‌کند همه چیز برای همه کس باشد، اما این کار را به قیمت وادار کردن شما به تعویض پردازش‌های فکری‌تان به منظور تناسب با ابزار، انجام می‌دهد.

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

ما از Bash، به عنوان یک سرنام [3] برای «Bourne-Again shell» و یک بازی لغوی با پوسته Bourne کلاسیک Stephen Bourn استفاده خواهیم نمود. Bash به یک استاندارد غیررسمی برای اسکریپت‌نویسی پوسته در اکثر سیستم‌های مبتنی بر یونیکس تبدیل گردیده است. اکثر اصولی که این کتاب پوشش می‌دهد به طور همانندی برای اسکریپت‌نویسی با سایر پوسته‌ها، از قبیل Korn Shell، که Bash برخی ویژگی‌هایش را از آن اخذ نموده، [4]، و ‎C Shell‎ و گونه‌هایش صدق می‌کند. (توجه کنید که برنامه‌نویسی ‎C Shell‎ به سبب برخی مشکلات ذاتی، همچنانکه که در اکتبر 1993 در یک یاداشت Usenet توسط Tom Christiansen اشاره شده است، توصیه نمی‌گردد.)

آنچه در ادامه می‌آید یک راهنمای آموزشی اسکریپت‌نویسی پوسته است. این راهنما برای تشریح ویژگی‌های گوناگون پوسته به طور کامل به مثال‌ها استناد می‌کند. اسکریپت‌های مثال کار می‌کنند -- تا آنجا که میسر بوده آزمایش گردیده‌اند -- و حتی برخی از آنها در واقعیت سودمند هستند. خواننده می‌تواند کد مثال‌هایی را که واقعاً کار می‌کنند (‎scriptname.sh‎ یا ‎scriptname.bash‎) را از ‎source archive‎ دریافت کند،[5] به آنها مجوز اجرا بدهد (‎chmod u+rx scriptname‎)، سپس برای دیدن آنچه رخ می‌دهد آنها را اجرا کند. اگر source archive در دسترس نباشد، آنوقت از نگارش‌های HTML یا pdf عرضه شده انتخاب (cut-و-paste) شوند. آگاه باشید که برخی از اسکریپت‌های ارایه شده در اینجا قبل از این که ویژگی‌ها شرح داده شوند آنها را مطرح می‌کنند، و ممکن است لازم باشد خواننده تا آموزش لازم به طور موقت از آنها عبور کند.

مگر اینکه به طور دیگر ذکر شده باشد، مولف این کتاب اسکریپت‌های مثالی را نوشته است که پیرو معرفی ویژگی می‌آیند.

 

چهره‌اش جسور بود نه شرمنده.

--Edmund Spenser

یادداشت‌ها

[1]

این‌ها به عنوان داخلی‌ها اشاره می‌شوند، ویژگی‌های درونی پوسته.

[2]

اگر چه در یک اسکریپت پوسته بازگشت میسر است، اما به کند بودن می‌گراید و پیاده‌سازی آن بیشتر اوقات یک ugly kludge است.

[3]

یک سرنام، یک کلمه ساختگی تشکیل شده در اثر چسباندن حروف ابتدایی کلماتِ یک عبارت است. این اخلاقاً عملی ناپسند و زیان‌آور است و درخورِ عقوبت سختگیرانه متناسبی می‌باشد. شلاق زدن در انظار عمومی، پیشنهاد می‌گردد.

[4]

بسیاری از ویژگی‌های ksh88، و تعدادی از ksh93 به روزرسانی شده، در Bash ادغام گردیده‌اند.

[5]

مطابق قرارداد، اسکریپت‌های نوشته شده کاربر که به طور کلی سازگار با پوسته Bourne هستند یک نام با پسوند ‎.sh‎ می‌گیرند. اسکریپت‌های سیستم، از قبیل آنهایی که در ‎/etc/rc.d‎ یافت می‌شوند، به طور الزامی با این نام‌گذاری مطابقت نمی‌کنند.