منبع اصلی نوشتار زیر در این لینک قرار دارد

آشنایی با BASH – بخش دهم (متغیر های درونی پوسته)

در تمامی سیستم عامل ها یک سری متغیر ها وجود دارند که اطلاعات خاصی را به ازای هر کاربر یا بصورت سراسری برای تمامی کاربران نگه داری می کنند. اینگونه متغیر ها را in-build variable گویند. در این پست اصلی ترین متغیر هایی درونی سیستم عامل لینوکس را معرفی می کنم. این متغیر ها د بیشتر سیستم عامل های یونیکسی مانند BSD ها (مثل FreeBSD) و سیستم عامل سولاریس و همچنین سیستم عامل مکینتاش نیز وجود دارند. می توانید در این پست چگونگی تعریف متغیر  را بخوانید. این متغیر ها در Shell Scripting بسیار کاربردی هستند.بطور مثال برای اینکه بررسی کنیم که آیا کاربر Login شده root است یا نه از متغیر UID$ استفاده می کنیم.توجه کنید که به ازای هر کاربری که Login می کند مقدار این متغیر ها ممکن است متفاوت باشد بطور مثال مقدار این متغیر های برای کاربر root نسبت به دیگر کاربران متفاوت است. برای فهرست کردن تمامی متغیر های محیطی (in-build) از دستور env استفاده کنید.

env | less

  • SHELL$ : نام پوسته ای که در هنگام ایجاد یک کاربر و با استفاده از سوییچ s- از دستور userasdd به کاربر دادیم را نشان می دهد. لیستی پوسته های نصب شده در سیستم عامل لینوکسی (یونیکسی) در فایل etc/shell/ قرار دارد.

cat /etc/shells

اگر می خواهید بدانید که نام پوسته (Shell) پیش فرضتان چیست دستور را را اجرا کنید.

echo $SHELL

  • HISTSIZE$ : در دایرکتوری خانگی هر کاربر فایلی به نام bash_history وجود دارد که لیستی از دستور های اجرا شده آن کاربر را نگه می دارد. متغیر HISTSIZE$ تعداد دستور هایی که در این فایل نگه داری  خواهد شد را تعیین می کند. مقدار پیش فرض آن 1000 است.
  • HISTFILE$ : محل ذخیره فایل را نشان می دهد. که بصورت پیش فرض در دایرکتوری خانگی هر کاربر قرار دارد.
  • USER$ : نام کاربریتان را ذخیره دارد.
  • UID$ : شناسه کاربر را نشان می دهد. شناسه کاربر root برابر عدد 0 و شناسه کاربران سیستمی مانند mysql اعدادی از 1 تا 100 هستند. کاربران سیستمی امکان Login به سیستم را ندارند و تنها توسط سرویس هایشان برای کنترل و دسترسی و نوشتن در فایل هایشان استفاده می شوند. به این خاطر نمی توانند وارد (Login) به سیستم شوند، چون دارای nologin Shell هستند. کاربران معمولی نیز عددی مانند 500 به بالا دارند. بطور مثال برای اینکه اجبار کنیم تا اسکریپتی توسط کاربر root انجام شود می توان از این متغیر استفاده کرد.
  • GROUPS$ : بدست آورن اطلاعات گروه
  • PWD$ : حاوی دایرکتوری جاری است. دایرکتوری جاری دایرکتوری است که کاربر در حال حاضر در آن قرار دارد. دستور pwd از مقدار این متغیر استفاده می کند.
  • HOSTNAME$ : نام ماشین یا hostname را نشان می دهد.
  • HOME$ : نام دایرکتوری خانگی کاربر را نشان می دهد.
  • HOSTTYPE$ یا MACHTYPE$ : معماری ماشین یعنی 32 بیتی یا 64 بیتی بودن را نشان می دهد.
  • OSTYPE$ : نوع سیستم عامل را نشان می دهد. بطور مثال اگر از لینوکس استفاده می کنید مقدارش Gnu Linux و یا اگر از سولاریس استفاده می کنید مقدارس Sun Solaris خواهد بود.
  • TERM$ : نام Terminal را نشان می دهد.
  • TMP$ یا TMPDIR$ : مسیر دایرکتوری Template را نشان می دهد
  • PATH$ : مسیر دایرکتوری هایی که حاوی فایل های باینری برای کاربر را نشان می دهد. برای اطلاع بیشتر این پست را بخوانید.
  • PIPESTATUS$ : عدد وضعیت اجرای یک Pipe را نشان می دهد. Pipe به معنی ارسال خروجی یک دستور به ورودی دستور دیگر است. بطور مثال دستور زیر ابتدا ls -l انجام می شود و خروجی آن به دستور wc -4 که تعداد سطر های خروجی دستور ls -l را می شمارد و نشان می دهد. چون اجرای دستور زیر درست است، پس وضعیت خروجی آن باید عدد 0 باشد.

ls -l | wc -l

echo $PIPESTATUS

0

اما اگر بجای دستور بالا از دستور زیر استفاده کنیم، چون از دستوری اشتباه استفاده کردیم (یک اشتباه در استفاده نادرست از سوئیچ ها در دستور wc)، پس عددی به جز صفر (141) نشان داده می شود.

ls -l | wc -l

echo $PIPESTATUS

141

  • متغیر های PS1 و PS2 و PS3 و PS4 نیز برای سفارشی کردن ترمینال به کار می روند. (توجه کنید که اول نامشان $ است)

پارامتر های زیر در اسکریپت نویسی بسیار مفید هستند.

  • RANDOM$ : از این متغیر برای ایجاد یک عدد تصادفی استفاده می کنند. بطور مثال می توان در اسکریپتی که برای ایجاد پسورد های پیچیده استفاد نمود.
  • SECONDS$ : تعداد ثانیه هایی که یک اسکریپت در حال اجرا شدن است.
  • $0 : نام اسکریپت را چاپ می کند. برای مثال در کد های زیر که در فایل fcleanup.sh ذخیره شده اند خط echo $0 با عث نمایش نام فایل اسکریپت یعنی fcleanup.sh می شود.

\"\"

  • #$ : تعداد آرگومان های ورودی یک شل را نشان می دهد.
  • *$ : تمامی آرگومان های ورودی را نشان می دهد.
  • @$ : تمامی آرگومان های ورودی را با یک فاصله نشان می دهد.
  • NUMBER$ : در اصل این آرگومان ها بصورت 1$ و 2$ و 3$ و … هستند معرف اولین آرگومان ورودی و دومین آرگومان ورودی و سومین آرگومان ورودی و … هستند. بطور مثال برای چاپ دومین و چهارمین آرگومان ورودی از دستور زیر استفاده کنید.

“echo “Dovomin argument hast: $2 va Chaharomin argument hast: $4

  • _$ : آخرین آرگومان شل را نشان می دهد. (اولین آرگومان شل 1$ بود)



برچسب ها : , , , , , , , , ,