مقدمه :
همه پوسته ها مجموعه ای از اطلاعات وضعیت را در طول shell sessions مدیریت می کنند. این اطلاعات زمان اجرا ممکن است در طول جلسه تغییر کند و بر نحوه رفتار پوسته تأثیر بگذارد. این داده ها همچنین توسط برنامه ها برای تعیین جنبه های پیکربندی سیستم استفاده می شود. بیشتر این داده ها به اصطلاح در متغیرهایی ذخیره می شوند که در این درس به آن ها می پردازیم.
متغیرها (Variables) :
متغیرها قطعات ذخیره سازی داده ها مانند متن یا اعداد هستند. پس از تنظیم ، مقدار یک متغیر در زمان دیگری قابل دسترسی خواهد بود. متغیرها نامی دارند که امکان دسترسی به یک متغیر خاص را فراهم می کند، حتی زمانی که محتوای متغیر تغییر می کند. آنها یک ابزار بسیار رایج در اکثر زبان های برنامه نویسی هستند.
در اکثر پوسته های لینوکس ، دو نوع متغیر وجود دارد :
Local variables :
این متغیرها فقط برای فرآیند پوسته فعلی در دسترس هستند. اگر یک متغیر محلی ایجاد کنید و سپس برنامه دیگری را از این پوسته شروع کنید، متغیر دیگر برای آن برنامه قابل دسترسی نیست.از آنجا که آنها توسط فرآیندهای فرعی به ارث نمی رسند ، این متغیرها متغیرهای محلی نامیده می شوند.
Environment variables :
این متغیرها هم در یک جلسه پوسته خاص و هم در فرآیندهای فرعی ایجاد شده از آن جلسه پوسته در دسترس هستند. از این متغیرها می توان برای انتقال داده های پیکربندی به دستورات اجرا شده استفاده کرد. از آنجایی که این برنامه ها می توانند به این متغیرها دسترسی داشته باشند، آنها را متغیرهای محیطی می نامند. اکثر متغیرهای محیطی با حروف بزرگ هستند (مانند PATH ، DATE ، USER) ، مجموعهای از متغیرهای محیطی پیشفرض ، برای مثال ، اطلاعاتی درباره فهرست اصلی کاربر یا نوع ترمینال ارائه میکنند. گاهی اوقات مجموعه کاملی از همه متغیرهای محیطی به عنوان محیط نامیده (environment) می شود. این نوع متغیرها به عنوان دامنه متغیر (variable scope) نیز شناخته می شوند.
نکته : متغیرها پایدار نیستند. هنگامی که پوسته ای که در آن تنظیم شده اند بسته می شود ، همه متغیرها و محتویات آنها از بین می روند. اکثر پوسته ها فایل های پیکربندی حاوی متغیرهایی را ارائه می دهند که هر زمان که یک پوسته جدید شروع می شود تنظیم می شوند. متغیرهایی که باید به طور دائم تنظیم شوند باید به یکی از این فایل های پیکربندی اضافه شوند.
دستکاری متغییر ها (Manipulating Variables) :
به عنوان یک مدیر سیستم، باید متغیرهای محلی و محیطی را ایجاد، اصلاح یا حذف کنید.
کار با متغیرهای محلی (Working with Local Variables) :
شما می توانید یک متغیر محلی را با استفاده از عملگر مساوی = (equal) تنظیم کنید. یک تخصیص ساده یک متغیر محلی ایجاد می کند :
نکته : هیچ فاصله ای قبل یا بعد از عملگر = قرار ندهید .
با استفاده از دستور echo می توانید هر متغیری را نمایش دهید. این دستور معمولاً متن را در بخش آرگومان نمایش می دهد:
برای دسترسی به مقدار متغیر باید از $ (dollar sign) در مقابل نام متغیر استفاده کنید.
همانطور که مشاهده می شود متغیر ایجاد شده است. حالا یک پوسته دیگر باز کنید و سعی کنید محتویات متغیر ایجاد شده را نمایش دهید.
چیزی نمایش داده نمی شود. این نشان می دهد که متغیرها همیشه فقط در یک پوسته خاص وجود دارند. برای تأیید اینکه متغیر در واقع یک متغیر محلی است، سعی کنید یک فرآیند جدید ایجاد کنید و بررسی کنید که آیا این فرآیند می تواند به متغیر دسترسی داشته باشد یا خیر. ما می توانیم این کار را با راه اندازی یک پوسته دیگر انجام دهیم و اجازه دهیم این پوسته دستور echo را اجرا کند. همانطور که پوسته جدید در یک فرآیند جدید اجرا می شود، متغیرهای محلی را از فرآیند والد خود به ارث نمی برد :
نکته : مطمئن شوید که از نقل قول های تک در مثال بالا استفاده می کنید .
برای حذف یک متغیر ، باید از دستور unset استفاده کنید :
نکته : unset به نام متغیر به عنوان آرگومان نیاز دارد. بنابراین نمیتوانید $ را به نام اضافه کنید، زیرا با این کار متغیر حل میشود و به جای نام متغیر، مقدار متغیر به unset منتقل میشود.
کار با متغیرهای سراسری (Working with Global Variables) :
برای در دسترس قرار دادن یک متغیر برای زیر فرآیندها ، آن را از یک Local into به یک environment variable تبدیل کنید. این کار با دستور export انجام می شود. هنگامی که با نام متغیر فراخوانی می شود، این متغیر به محیط shell اضافه می شود :
نکته : باز هم، مطمئن شوید که هنگام اجرای export از $ استفاده نکنید زیرا می خواهید نام متغیر را به جای محتوای آن ارسال کنید. یک راه ساده تر برای ایجاد متغیر محیطی ، ترکیب هر دو روش بالا، با اختصاص مقدار متغیر در قسمت آرگومان فرمان است.
بیایید دوباره بررسی کنیم که آیا متغیر برای زیر فرآیندها قابل دسترسی است یا خیر :
روش دیگر استفاده از متغیرهای محیطی استفاده از آنها در مقابل دستورات است. ما می توانیم این را با متغیر محیطی TZ که منطقه زمانی را نگه می دارد آزمایش کنیم. این متغیر توسط تاریخ فرمان برای تعیین زمان نمایش منطقه زمانی استفاده می شود :
با استفاده از دستور env می توانید تمام متغیرهای محیط را نمایش دهید.
متغیر PATH :
متغیر PATH یکی از مهم ترین متغیرهای محیطی در سیستم لینوکس است. فهرستی از دایرکتوری ها را که با دو نقطه جدا شده اند، ذخیره می کند که شامل برنامه های اجرایی واجد شرایط به عنوان دستورات از shell لینوکس است.
برای افزودن یک دایرکتوری جدید به متغیر، باید از علامت دو نقطه (:) استفاده کنید.در اینجا یک مثال :
همانطور که می بینید ، PATH$ در مقدار جدید اختصاص داده شده به PATH استفاده می شود. این متغیر در حین اجرای دستور حل می شود و اطمینان حاصل می کند که محتوای اصلی متغیر حفظ می شود. البته می توانید از متغیرهای دیگری نیز در انتساب استفاده کنید:
متغیر PATH باید با احتیاط رفتار شود ، زیرا برای کار بر روی خط فرمان بسیار مهم است. بیایید متغیر PATH زیر را در نظر بگیریم :
برای اینکه بفهمید shell چگونه دستور خاصی را فراخوانی می کند که می تواند با نام دستور به عنوان آرگومان اجرا شود. برای مثال میتوانیم بفهمیم nano در کجا ذخیره میشود :
همانطور که مشاهده می شود، فایل اجرایی نانو در پوشه /usr/bin قرار دارد. بیایید دایرکتوری را از متغیر حذف کنیم و بررسی کنیم که آیا دستور همچنان کار می کند یا خیر :
بیایید دوباره دستور nano را جستجو کنیم :
همانطور که مشاهده می شود، دستور یافت نشد، بنابراین اجرا نمی شود. پیغام خطا همچنین دلیل پیدا نشدن دستور و جستجو در چه مکان هایی را توضیح می دهد. بیایید فهرست ها را دوباره اضافه کنیم و دوباره دستور را اجرا کنیم.
اکنون فرمان ما دوباره کار می کند .
نکته : ترتیب عناصر در PATH نیز ترتیب جستجو را مشخص می کند. اولین فایل اجرایی منطبق که هنگام عبور از مسیرها یافت می شود اجرا می شود.
خلاصه :
در این آزمایشگاه یاد گرفتید :
- انواع متغیرها
- نحوه ایجاد متغیرها
- نحوه دستکاری متغیرها
دستورات مورد استفاده در تمرینات :
env :
نمایش محیط فعلی
echo :
متن خروجی
export :
متغیرهای محلی را در دسترس زیرفرایندها قرار میدهد.
unset :
یک متغیر را حذف کنید .
ترجمه از کتاب :
https://learning.lpi.org/en/learning-materials/010-16