آموزش تصویری انواع متغیرها در لینوکس با مثالهای کاربردی

آموزش تصویری انواع متغیرها در لینوکس با مثالهای کاربردی

با انواع متغیرها در لینوکس بهمراه مثالهای کاربردی و تصویری آشنا خواهید شد که برای یونیکس هم صدق می‌کند.
متغیرها توسط برنامه‌های کاربردی و فرایندها مورد استفاده قرار می‌گیرند یا بین دیگر به اشتراک گذاشته می‌شوند.
دستورات این آموزش در shell یا پوسته bash  اجرا شده است که پوسته فرض اکثر سیستم عامل‌های لینوکسی است.

پیش‌نیازها

  • داشتن یک سیستم کامپیوتری
  • نصب بودن یک توزیع لینوکس بر روی کامپیوتر
  • آشنایی نسبی با ترمینال یا SSH در لینوکس
  • داشتن یک لبخند بر صورت

متغیر در لینوکس

متغیر یک pointer یا اشاره گر به داده واقعی است.
هر متغیر دارای نام و مقدار است که در shell یا پوسته تعریف می‌شوند یا از قبل تعریف شده اند.
امکان ایجاد و حذف و بروزرسانی یک متغیر در پوسته های لینوکس مثل bash وجود دارد.

نام متغیر

نام متغیر یا variable شامل حروف کوچک وبزرگ a تا z و اعداد 0 تا 9 است و می‌تواند با حروف و کاراکتر ـ شروع شود ولی اعداد مجاز نیست.

مثال

متغیرها با نامهای زیر معتبر هستند.

مثال

متغیرها با نامهای زیر نامعتبر هستند.

سه کاراکترهای  ! و * و –  در شل معنای خاصی دارند بنابراین امکان استفاده از آنها در نام متغیر نیست.

مقدار متغیر

یک متغیر می‌تواند مقدارهای مختلفی مثل اعداد، متن، نام فایل، آرایه و انواع دیگر باشد.
در زمان تعریف یا مقداردهی متغیر نیاز نیست مشخص کنید که متغیر بصورت عدد یا رشته یا آرایه است.
این نکته مهم را به یاد داشته باشید که بین نام متغیر، علامت = و مقدار متغیر نباید فاصله باشد و باید پشت‌سر‌هم نوشته شوند.

انواع متغیرها در لینوکس

متغیرها در پوسته bash به دو نوع محلی و سراسری تقسیم می شوند که در ادامه با آنها آشنا خواهید شد.

متغیرهای محلی یا Local variables

یکی از انواع متغیرها در لینوکس، متغیرهای محلی هستند که باید در shell تعریف شوند تا امکان استفاده از آنها وجود داشته باشد.
متغیرهای محلی بهتر است با حروف کوچک انگلیسی نوشته شود تا از متغیرهای سراسری متمایز باشند.

تعریف متغیر محلی

با استفاده از علامت = مقدار به متغیر اختصاص داده می‌شود. نام variable در سمت چپ و مقدار آن در سمت راست = قرار می‌گیرد.
مقدار=نام

مثال

تعریف متغیر محلی در لینوکس و نمایش مقدار آن

برای نمایش مقدار متغیر از دستور echo استفاده می‌شود.

برای زمانی که مقدار یک متغیر یک رشته طولانی یا بین کلمات فاصله هست حتما اول و انتهای  مقدار متغیر از double quotation یعنی ” استفاده کنید.
زمانی که از ” استفاده می‌کنید امکان این را دارید که در مقداردهی یک متغیر دیگر از یک متغیر از قبل تعریف شده استفاده کنید.

مثال

در خط اول در زمان تعریف متغیر از ” استفاده نشده است و کلمه دوم یعنی khosh بعنوان یک دستور نامعتبر در پوسته شناخته شده است.
در خط بعدی این مشکل با ” رفع شده است.

مقداردهی متغیرهای لینوکس با double quotation

البته می‌توانید از single quotation یا ‘ استفاده کنید ولی بر خلاف ” ، امکان استفاده از متغیرهای قبلی در مقداردهی به یک متغیر دیگر نیست.

مثال

مقداردهی متغیرهای لینوکس با single quotation

متغیرهای محلی در همان shell یا فرایند که تعریف می شوند در دسترس هستند و در پوسته ها و فرایندهای والد یا فرزند در دسترس نخواهند بود.

مثال

یک shell جدید با دستور bash ایجاد می‌شود که متغیر در دسترس نیست.

دسترسی به متغیرهای محلی در پوسته جدید

مثال

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

دسترسی به متغیرهای محلی در پوسته والد

دستیابی به متغیرهای محلی

برای مشاهده یا دستیابی به مقدار ذخیره شده در یک متغیر از علامت دلار یعنی $ بهمراه نام متغیر استفاده می‌شود.

مثال

فراخوانی و دستیبانی به مقدار متغیر محلی در لینوکس

متغیرهای فقط خواندنی

زمانی که یک متغیر با دستور readonly بصورت فقط خواندنی تنظیم شود دیگر امکان تغییر مقدار آن متغیر نیست.

متغیر فقط خواندنی در لینوکس

حذف متغیر

برای حذف یک متغیر محلی  از shell در لینوکس می‌توانید از دستور unset استفاده کنید.
کافی است در روبروی دستور unset نام متغیر را بنویسید.

مثال

حذف متغیر در پوسته لینوکس

متغیرهای سراسری یا Global variables

یکی دیگر از انواع متغیرها در لینوکس، متغیرهای سراسری (global variables) یا متغیرهای محیطی (environments variables) هستند که از قبل در shell تعریف شده اند.
امکان استفاده و دسترسی به این متغیرها در shell فرزند و فرایندهای اصلی و فرایندهای فرزند وجود دارد.
منظور از فرایند همان process است.
زمانی که جلسه (session) پوسته bash شروع می‌شود متغیرهای سراسری تنظیم می‌شوند.
متغیرهای سراسری با حروف بزرگ انگلیسی نوشته و فراخوانی می‌شوند.
متغیرهای سراسری برای shell ضروری هستند چون بسیاری از توابع shell در حال استفاده از این متغیرها هستند بنابراین بدون اطلاع از کاربرد آنها تغییری در مقدار آنها اعمال نکنید.

مشاهده تمامی متغیرهای محیطی در لینوکس

در لینوکس یک بسته یا package با نام coreutils وجود دارد که مجموعه ای از ابزارهای پایه GNU هست که env و printenv نیز جزئی از این ابزارها هستند.
env و printenv برای نمایش تمامی متغیرهای محیطی در لینوکس استفاده می‌شود.

مثال

در تصویر زیر خروجی دستور env مشخص است که با خروجی دستور printenv  کاملا یکسان است.

دستور env در لینوکس برای نمایش تمامی متغیرهای محیطی در لینوکس

 

مثال

در حال حاضر ارزشمندترین متغیر محیطی در این لیست متغیر محیطی PATH است.
این متغیر، برای نگهداری مسیرهایی استفاده می‌شود که در زمان وارد کردن یک دستور، پوسته bash باید در آنها به دنبال دستور بگردد و در صورت یافتن، آن را اجرا کند.
هر مسیر با کاراکتر :  که در انگلیسی colon نامیده می‌شود از مسیرهای دیگر تفکیک شده است.
اولویت مسیرها از چپ به راست است بنابراین مسیرهای سمت چپ زودتر جستجو می‌شوند.

مقدار متغیر سراسری path در bash در لینوکس

پوسته bash در لینوکس از پوسته اصلی یونیکس یعنی Bourne مشتق شده است بنابراین متغیرهایی دارند که در هر دو مشترک است.

متغیرهای رزرو شده پوسته Bourne

جدول زیر لیستی از متغیرها را نمایش می‌دهد که از قبل برای پوسته یا shell با نام Bourne تعرف شده‌اند.

گزینه توصیف
CDPATH لیستی از دایرکتوری ها که با : از هم جدا شده و برای جستجو در مسیرها در زمان استفاده از دستور cd استفاده می‌شود.
HOME فولدر home کاربر فعلی را مشخص می کند و کاراکتر ~ نیز در لینوکس به مسیر این فولدر اشاره می‌کند
IFS لیستی از کاراکترها که ستون یا فیلدها را هم جدا می کند، زمانی استفاده می‌شود که shell کلمات را از یکدیگر جهت انبساط جدا می‌کند
MAIL اگر مقدار این متغیر برابر نام فایل باشد و مقدار متغیر MAILPATH تنظیم نشده باشد، BASH ایمیل را به کاربر وارد شده در آن فایل اطلاع‌رسانی می‌کند.
MAILPATH لیستی از فایلها که با : از هم جدا شده اند و shell بصورت دوره ای فایل ها را به ترتیب برای ایمیل های جدید بررسی می‌کند
OPTARG مقدار آرگومان آخرین option ‍‍پردازش شده توسط getopts
OPTIND نشانگر آرگومان آخرین option پردازش شده توسط getopts
PATH لیستی از دایرکتوری که با : از یکدیگر جدا شده اند و shell در این دایرکتوری به دنبال دستورات  می‌گردد
PS1 مخفف primary prompt string است و مقدار  پیش فرض آن “‘\s-\v\$ ‘” می‌باشد
PS2 مخفف secondary prompt string است و مقدار پیش فرض آن  “‘> ‘” می‌باشد

متغیرهای رزرو شده پوسته bash

جدول زیر لیستی از متغیرها را نمایش می‌دهد که از قبل برای پوسته یا shell با نام bash تعرف شده‌اند.

گزینه توصیف
auto_resume این متغیر نحوه تعامل shell با user و job control را کنترل می‌کند.
BASH مسیر مطلق BASH  که در حال حاضر اجرا شده است را نمایش می‌دهد
BASH_ENV مقدار این متغیر مسیر یک فایل را مشخص می کند که برای انجام debug قبل از اجرای یک فایل شل اسکریپت استفاده می‌شود
BASH_VERSION نسخه BASH را نمایش می‌دهد.
BASH_VERSINFO یک آرایه  فقط خواندنی که عناصر آن اطلاعات نسخه BASH را نگهداری می‌کند
COLUMNS توسط دستور select جهت تشخیص عرض ترمینال در زمان چاپ لیست های انتخاب شده استفاده می‌شود. با دریافت سیگنال SIGWINCH به طور خودکار تنظیم می‌شود.
COMP_CWORD نشانگر به موقعیت کلمه ای از کلمات داخل متغیر ${COMP_WORDS} که مکان نما به آن اشاره می‌کند
COMP_LINE خط فرمان فعلی را نمایش می‌دهد
COMP_POINT
نشانگر موقعیت مکان نما فعلی نسبت به ابتدای دستور فعلی
COMP_WORDS
یک متغیر آرایه متشکل از تک تک کلمات در خط فرمان فعلی
COMPREPLY یک متغیر آرایه که Bash از آن تکمیل‌های احتمالی ایجاد شده توسط یک تابع پوسته را که توسط تسهیلات تکمیل قابل برنامه‌ریزی فراخوانی شده است را می‌خواند.
DIRSTACK یک متغیر آرایه حاوی محتوای فعلی پشته دایرکتوری.
EUID شناسه یا شماره effective user ID  کاربر فعلی
FCEDIT ویرایشگری که در دستور fc (built-in) با گزینه e- بصورت پیش‌فرض استفاده ‌‌می‌شود
FIGNORE
لیستی از پسوندهای جدا شده با : که باید هنگام تکمیل نام فایل نادیده گرفته شوند
FUNCNAME
نام هر تابع شل که حال اجرا است
GLOBIGNORE
لیستی از الگوهای جدا شده با : که مجموعه‌ای از نام فایل ها را تعریف می‌کند که باید با گسترش نام فایل نادیده گرفته شوند.
GROUPS
یک متغیر آرایه حاوی لیست گروه هایی که کاربر فعلی عضوی از آنهاست
histchars
حداکثر سه کاراکتر که گسترش history، جایگزینی سریع و نشانه‌گذاری را کنترل می‌کنند
HISTCMD
شماره دستور در history یا نشانگر در لیست  history دستور فعلی.
HISTCONTROL
تعیین می کند که آیا دستوری به فایل تاریخچه اضافه شود یا خیر
HISTFILE
نام فایلی که history ترمینال لینوکس در آن ذخیره می‌شود. مقدار پیش فرض bash_history./~ است.
HISTFILESIZE
حداکثر تعداد خطوط موجود در فایل history، به طور پیش فرض 500 است
HISTIGNORE
لیستی از الگوهای جدا شده با : مورد استفاده برای تصمیم گیری اینکه کدام خطوط فرمان باید در لیست history ذخیره شوند
HISTSIZE
حداکثر تعداد دستورات برای به خاطر سپردن در لیست تاریخچه، پیش فرض 500 است.
HOSTFILE
حاوی نام فایلی با فرمت etc/hosts/ است که باید زمانی خوانده شود که پوسته نیاز به کامل کردن hostname دارد
HOSTNAME
نام میزبان یا host فعلی
HOSTTYPE
رشته ای که ماشین Bash ;که در حال اجرا است را توصیف می‌کند.
IGNOREEOF
عملکرد پوسته را هنگام دریافت یک کاراکتر EOF به عنوان تنها ورودی کنترل می‌کند.
INPUTRC
نام فایل مقداردهی اولیه Readline – پیش‌فرض فعلی یعنی etc/inputrc/ را نادیده می‌گیرد
LANG
برای تعیین دسته محلی یا locale category یا lc  دسته انتخاب نشده استفاده می‌شود که فاقد متغیری است که با LC_ شروع می شود
LC_ALL
این متغیر نادیده می‌گیرد مقدار LANG و هر متغیر LC_ دیگری را که یک دسته محلی را مشخص می کند
LC_COLLATE
این متغیر ترتیب collation مورد استفاده در هنگام مرتب سازی نتایج گسترش نام فایل را تعیین می‌کند و رفتار range expressions، کلاس‌های هم‌ارزی، و توالی‌های تطبیق را در بسط نام فایل و تطبیق الگو تعیین می‌کند
LC_CTYPE
این متغیر تفسیر کاراکترها و رفتار کلاس‌های کاراکتر را در بسط نام فایل و تطبیق الگو تعیین می‌کند
LC_MESSAGES
این متغیر تعیین می‌کند چه locale ایی باید استفاده شود برای ترجمه رشته‌های بین ” و ” که علامت “$” قبل از آنها وجود دارد
LC_NUMERIC
این متغیر دسته locale مورد استفاده برای قالب بندی اعداد را تعیین می‌کند
LINENO
شماره خط در اسکریپت یا تابع پوسته در حال اجرا
LINES
توسط دستور select که از نوع built-in است برای تعیین طول ستون برای چاپ لیست انتخاب شده استفاده می‌شود
MACHTYPE
رشته ای که به طور کامل نوع سیستمی که Bash روی آن اجرا می شود را با فرمت استاندارد GNU بصورت CPU-COMPANY-SYSTEM توصیف می کند
MAILCHECK
هر چند ثانیه shell باید ایمیل را در فایل های مشخص شده در متغیرهای MAILPATH یا MAIL بررسی کند
OLDPWD
دایرکتوری کاری قبلی که توسط  دستور cd (دستور از نوع built-in) تنظیم شده است را نمایش می‌دهد.
OPTERR
اگر روی مقدار 1 تنظیم شود، Bash پیام های خطای ایجاد شده توسط getopts (دستور از نوع built-in) داخلی را نمایش می‌دهد.
OSTYPE
رشته ای که Bash در حال اجرا در سیستم عامل  را توصیف می‌کند
PIPESTATUS
یک متغیر آرایه ای که حاوی لیستی از مقادیر وضعیت خروج فرآیندها که اخیرا بصورت پیش زمینه در خط لوله اجرا شده‌اند (که ممکن است فقط شامل یک signal باشد)
POSIXLY_CORRECT
اگر این متغیر هنگام شروع bash در environment باشد، پوسته وارد حالت POSIX می‌شود.
PPID
شناسه فرآیند مربوط به  فرآیند والد پوسته یا shell’s parent process ID
PROMPT_COMMAND
اگر تنظیم شود، مقدار به عنوان دستوری برای اجرا قبل از چاپ هر فرمان اصلی (PS1) تفسیر می‌شود.
PS3
مقدار این متغیر به عنوان اعلان دستور select استفاده می شود. پیش‌فرض “‘#؟” است.
PS4
مقدار عبارت است از دستوری که قبل از اعلان خط فرمان هنگام تنظیم گزینه x- چاپ می‌شود. پیش‌فرض روی “”+” است.
PWD
دایرکتوری فعلی که توسط دستور cd تنظیم شده است.
RANDOM
هر بار که این پارامتر ارجاع داده می‌شود، یک عدد صحیح تصادفی بین 0 تا 32767 تولید می‌شود. با اختصاص یک مقدار به این متغیر، مولد اعداد تصادفی ایجاد می‌شود.
REPLY متغیر پیش فرض برای دستور read که از نوع built-in است
SECONDS
این متغیر به تعداد ثانیه‌هایی که پوسته راه‌اندازی شده است گسترش می‌یابد
SHELLOPTS
فهرستی از گزینه‌های پوسته فعال که با : جدا شده است
SHLVL
هر بار که نمونه جدیدی از Bash شروع می‌شود یک عدد افزایش می‌یابد.
TIMEFORMAT
مقدار این پارامتر به عنوان یک رشته فرمت استفاده می‌شود که مشخص کننده اطلاعات زمان‌بندی خطوط لوله با پیشوند رزرو شده time نمایش داده شود.
TMOUT
اگر روی مقداری بیشتر از صفر تنظیم شود، TMOUT به عنوان مهلت زمانی پیش‌فرض برای دستور read در نظر گرفته می‌شود. در یک پوسته تعاملی، مقدار به عنوان تعداد ثانیه‌های انتظار برای ورودی تفسیر می‌شود پس از صدور اعلان اولیه هنگامی که پوسته تعاملی است. اگر ورودی نرسد، Bash پس از آن تعداد ثانیه خاتمه می‌یابد.
UID
شناسه کاربری واقعی و عددی کاربر فعلی

تعریف متغیر محیطی یا سراسری

در سه سطح مختلف امکان تعریف یک متغیر سراسری وجود دارد. اکثرا سایتها یا منابع آموزشی به این نکته اصلا اشاره نکره اند ولی در ایران ادمین بصورت کامل بهمراه مثالهای تصویری آشنا خواهید شد.

سطح ترمینال

زمانی که دستور export را در برای یک متغیر محلی استفاده کنید آن متغیر تا زمانی که ترمینال باز باشد در پوسته ها و فرایندهای والد و فرزند در دسترس و قابل فراخوانی است.
زمانی که پنجره ترمینال فعلی بسته یا قطع شود امکان دسترسی به آن متغیر وجود نخواهد داشت.

مثال

با export متغیر بصورت سراسری در ترمینال تعریف شده است و تا زمانی که ترمینال باز باشد مقدار متغیر نیز در دسترس خواهد بود.
با دستور bash پوسته والد ایجاد می‌شود و همچنان متغیر var1 در دسترس و قابل فراخوانی است.

تعریف متغیر سراسری در لینوکس با دستور export در ترمینال لینوکس

سطح کاربر

زمانی که با دستور export یک متغیر در یکی از فایل های bashrc./~  یا profile./~ یا bash_profile./~  تعریف شود آن متغیر بصورت دائمی برای آن کاربر همیشه در ترمینال در دسترس است.
کاراکتر ‍‍‍‍‍‍‍‍~ به معنای فولدر home آن کاربر است.
فرض کنید شما کاربر root هستید و فولدر home کاربر root بصورت root/ باشد بنابراین مسیر فایلها بصورت root/.bashrc/  یا  root/.profile/   یا  root/.bash_profile/  می‌باشد.

مثال

در تصویر زیر تعریف متغیر برای کاربر root در فایل root/.bashrc/ انجام شده است.

تعریف متغیر سراسری در لینوکس برای کاربر root در فایل bashrc

سطح سیستم عامل

زمانی که یک متغیر در فایل etc/environment/ اضافه شود آن متغیر در سیستم عامل توسط تمامی کاربران یا برنامه ها در دسترس و قابل فراخوانی است.
اگر ترمینال بسته شود یا سیستم عامل ریستارت شود این متغیر در دسترس است چون بصورت دائمی در سیستم عامل تعریف شده است.

مثال

تعریف متغیر سراسری دائمی در لینوکس

سخن پایانی

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


5/5 - (3 امتیاز)
برچسب‌ها: , ,
درباره نویسنده
ادمین
تجربه ۱۰ ساله در زمینه هاستینگ دارد و به صاحبان وب‌سایت‌ها کمک می‌کند از سرویس هاست با کیفیت برای موفقیت کسب‌و‌کار خود استفاده کنند. دلیل عمده نارضایتی مشتری نبود تعامل پشتیبان هاست با صاحبان وب‌سایت‌ها است. روش ایران ادمین ارائه مشاوره در خصوص انتخاب سرویس هاست مناسب و کمک به بهینه‌سازی وب سایت‌شان است.
اشتراک
اطلاع از
guest

0 نظرات
بازخورد بین خطی
مشاهده همه نظرات
0
نظرت درباره این نوشته چیه ؟x