پارامترها – آموزش اسکریپت نویسی لینوکس
آموزش اسکریپت نویسی لینوکس (پارامترها)
پارامترها محلهای نامگذاری شده در حافظه هستند که شما میتوانید دادهها را در آنجا ذخیره کنید، آنها به طور معمول داده رشتهای را ذخیره میکنند،
اما میتوانند برای ذخیره آرایهها یا اعداد صحیح نیز استفاده شوند.
پارامترها دو دسته هستند:
- متغیرها
- پارامترهای خاص.
پارامترهای خاص: فقط خواندنی هستند، توسط پوسته مقداردهی اولیه میشوند، و برای تعامل با برخی وضعیتهای داخلی استفاده میشوند.
متغیرها: پارامترهایی هستند، که خودتان میتوانید آنها را ایجاد و به هنگام سازی نمایید.
نام متغیرها مطابق قواعد زیر محدود میگردد:
نام:
یک کلمه فقط متشکل از حروف، ارقام، و خط زیر (underscore) است، که با یک حرف یا یک خط زیر شروع می شود.
همچنین به عنوان یک شناسه به آن رجوع میشود.
برای ذخیره داده در یک متغیر، از ترکیب دستوری تخصیص به شکل زیر استفاده میکنیم:
varname=vardata
این دستور مقدار vardata را به متغیری به نام varname اختصاص میدهد.
لطفاً توجه نمایید که نمیتوانید از فاصله در اطراف علامت تخصیص = استفاده کنید.
اگر این را بنویسید:
varname = vardata
BASH متوجه نخواهد شد، سعی میکند یک تخصیص انجام دهد.
تفکیک کننده varname را بدون = میبیند و با آن همچون نام یک فرمان رفتار میکند و بعد هم = و vardata را به عنوان شناسههای آن عبور میدهد.
برای دستیابی به محتوای متغیرها، از بسط پارامتر استفاده می کنیم.
یعنی جایگزینی پارامتر ذکر شده با مقدار آن، ترکیب به کار رفته به bash میگوید که شما میخواهید محتویات متغیر را به کار ببرید.
پس از آن، BASH میتواند دستکاریهای اضافه را روی نتایج انجام بدهد.
درک این مفهوم به طور صحیح، بسیار با اهمیت میباشد، زیرا خیلی متفاوت با رفتار سایر زبان های برنامهنویسی با متغیرها است!
برای تشریح آنکه بسط پارامتر چیست، بیایید از مثال استفاده کنیم:
foo=bar
“echo “Foo is $foo
وقتی Bash میخواهد کد شما را اجرا کند، اول دستور شما را با گرفتن نتیجه بسط پارامتر (foo$) و تعویض آن با محتوای foo، که bar است، تغییر میدهد.
دستور اینطور میشود:
“echo “Foo is bar
Foo is bar
اکنون Bash آماده اجرای فرمان است. اجرای آن یک جمله ساده در صفحه نمایش نشان میدهد.
اهمیت دارد بدانیم که بسط پارامتر موجب میشود که $parameter با محتوای آن تعویض گردد،
به علت حالت زیر که به استناد فهم مبحث تفکیک شناسه در قسمت قبل میباشد:
“song=”My song.mp3
rm $song
rm: My: No such file or directory
rm: song.mp3: No such file or directory
چرا این عمل نمیکند؟
به علت آنکه Bash، جمله $song شما را با محتوای متغیر تعویض نموده، که My song.mp3 شده است،
سپس تفکیک کلمه را انجام داده و فقط پس از آن دستور را اجرا کرده است.
و این مانند آن است که تایپ کرده باشید:
rm My song.mp3
و بر اساس قواعد تفکیک کلمه، Bash گمان میبرد که منظور شما My و song.mp3 به معنی دو فایل مختلف است،
زیرا بین آنها فاصله وجود دارد و نقلقولی هم نشده است.
چطور آن را رفع کنیم؟
به خاطر بسپاریم که در اطراف هر بسط پارامتر، نقلقول دوگانه را قرار بدهیم!
“rm “$song
پارامترهای خاص و متغیرها
اجازه دهید قبل از اقدام واقعی واژگان به کار رفته را مرتب کنیم.
پارامترها و متغیرها را داریم.
متغیرها در واقع فقط نوعی از پارامترها میباشند:
پارامترهایی که با یک نام مشخص میشوند.
آن پارامترهایی که متغیر نیستند، پارامترهای خاص نامیده شدهاند.
اطمینان دارم که با چند مثال بهتر متوجه خواهید شد:
:Some parameters that aren’t variables #
“echo “My shell is $0, and has these options set
My shell is -bash, and has these options set: himB
:Some parameters that ARE variables #
“.echo “I am $LOGNAME, and I live at $HOME
.I am rashvand, and I live at /home/rashvand
لطفاً توجه نمایید:
برخلاف PHP و Perl پارامترها با علامت $ شروع نمیشوند.
علامت $ که شما در مثال مشاهده میکنید، صرفاً موجب میشود که پارامتر ذکر شده بعد از آن، بسط داده شود.
بسط اساساً به معنای آن است که پوسته پارامتر را با محتوای آن تعویض میکند.
به این ترتیب، LOGNAME پارامتری (متغیری) است که محتوای آن نام کاربری شماست.
$LOGNAME عبارتی است که با محتوای آن متغیر تعویض خواهد شد، که در این حالت rashvand است.
پارامترهای ویژه:
- 0:
محتوی نام یا مسیر اسکریپت است (این در همه حال صدق نمیکند.)
پارامترهای موضعی (مکانی) 1،2،3 و …، اینها محتوی شناسههایی میباشند که ما به اسکریپت یا تابع جاری میدهیم.
- *:
به همه کلمات تمام پارامترهای موضعی بسط مییابد.
اگر نقلقول دوگانه بشود، به یک رشته منفرد شامل تمام پارامترهای موضعی بسط مییابد،
که با اولین کاراکتر متغیر IFS از یکدیگر جدا شدهاند.
- @:
به تمام کلمات پارامترهای موضعی بسط مییابد،
اگر نقلقول دوگانه بشود، به لیستی از تمام کلمات پارامترهای موضعی به صورت کلمههای منفرد، بسط مییابد.
- #:
به عدد معادل تمام پارامترهای موضعی (مکانی) ارائه شده فعلی، بسط مییابد.
- ?:
به کد خروج آخرین فرمان تکمیل شده در پیشزمینه، بسط مییابد.
- $:
به PID (شماره ID پردازش) پوسته جاری، بسط مییابد.
- !:
به PID آخرین دستور اجرا شده در پسزمینه، بسط مییابد.
- _:
به آخرین شناسه آخرین فرمانی که اجرا شده است، بسط داده میشود.
حالا چند مثال از متغیرهایی که پوسته برای شما فراهم میکند:
- BASH_VERSION: محتوی رشته ایست که شماره نگارش BASH را شرح میدهد.
- HOSTNAME: شامل نام میزبان کامپیوتر شما میباشد، به شکل کوتاه یا بلند، بستگی به چگونگی تنظیمات کامپیوتر شما دارد.
- PPID: محتوی شماره شناسایی پردازش (PID) پردازش والد پوسته جاری است.
- PWD: محتوی دایرکتوری کاری جاری است.
- RANDOM: هرگاه این متغیر را بسط بدهید، یک عدد تصادفی (ساختگی) بین 0 تا 32767 تولید میشود.
- UID: شماره شناسایی (ID) کاربر فعلی.
- COLUMNS: تعداد کاراکترهایی که میتواند یک سطر از ترمینال شما را پر کند.
- LINES: تعداد سطرهایی که ترمینال جاری شما را پر میکند.
- HOME: دایرکتوری خانگی کاربر فعلی.
- PATH: یک لیست از مسیرها، که با کاراکتر کولن از یکدیگر جدا شدهاند
و در صورتی که یک فرمان، مستعار، تابع، دستور داخلی، و کلمه کلیدی نباشد،
و مسیر آن نیز تعیین نشده باشد، برای یافتن آن دستور جستجو میشوند.
- PS1: شامل رشته ایست که اعلان پوسته شما را تشریح میکند.
- TMPDIR: شامل دایرکتوری مورد استفاده پوسته برای نگهداری فایلهای موقتی آن، میباشد.
جهت مشاهده دوره های آموزشی بر روی این لینک کلیک نمایید.
جدیدترین اخبار مجموعه فراز نتورک را در این صفحه اجتماعی دنبال کنید.
نویسنده: موسی رشوند
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.