در بخش قبل به توضیحی درباره متغیرها پرداختم و الان میخوام به بررسی متغیرهای خصوصی در زباناسکریپت نویسی bash بپردازم. برای مثال اگر میخواین pid شلی که در حال اجراست رو در بیارید میتونید به صورت زیر عمل کنید:
1 2 |
blog@Arshatech:~$ echo $$ 29949 |
حالا میخوام به توضیح مختصری درباره این نوع متغیرها بپردازم و در انتها هم یک مثال براتون بیارم:
- $۰: نام اسکریپتی که در حال نوشتن اون هستید رو نمایش میده.
- n$: در این جا شما میتونید به جای n مقدار عددی مثبت رو قرار بدید. مثلا ۱$ بیانگر پارامتر اولی هست که به اسکریپت میدید و ….
- #$: این علامت بیانگر تعداد پارامترهایی هست که این اسکریپت نیاز داره تا با اون ها اجرا بشه. یا تعداد پارامترهایی که اسکریپت با اون اجرا شده.
- *$: تمام پارامتر ها رو به نمایش میذاره
- @$: این هم مانند قبل همه پارامتر ها رو نشون میده
- ?$: این متغیر وضعیت خروج آخرین دستور زده شده رو به صورت یک عدد به شما نمایش میده. مثلا اگر دستور آخری که اجرا کردید موفقیت آمیز بوده و صحیح بده مقدار ۰ رو بر میگردونه و اگر دستور یا اسکریپت با موفقیت به اجرا در نیامد مقدار ۱- را بر میگرداند
- $$: شماره پراسه شل در حال اجرا یا شلی که در اون هستید رو بر میگردونه
- !$: شماره پراسه آخرین دستوری که در background اجرا شده رو نمایش میده
آرگومان های command-line
اگر این بخش رو با یک مثال براتون توضیح بدم حتما بهتر متوجه میشید. به اسکریپت زیر دقت کنید. این اسکریپت قراره پارامترهای ورودی به خودش رو که دو تا هم هستند و با ۱$ و ۲$ مشخص میشن رو صدا بزنه:
1 2 3 4 5 6 7 |
#!/bin/sh echo "File Name: $0" echo "First Parameter : $1" echo "First Parameter : $2" echo "Quoted Values: $@" echo "Quoted Values: $*" echo "Total Number of Parameters : $#" |
حالا اگر اسکریپ بالا به صورت زیر اجرا بشه خروجی که در ادامه خواهید دید براتون نمایش داده میشه:
1 2 3 4 5 6 7 |
blog@Arshatech:~$ ./test.sh Alice Bob File Name : ./test.sh First Parameter : Alice Second Parameter : Bob Quoted Values: Alice Bob Quoted Values: Alice Bob Total Number of Parameters : 2 |
پارامتر های *$ و @$
این پارامتر ها تا وقتی که درون ” ” قرار نگیرند مانند یکدیگر عمل میکنند. ولی اگر آن ها را درون ” ” قرار بدهید اگر از “*$” استفاده کنید همه پارامتر ها را به صورت خطی بعنوان یک آرگومان در نظر میگیرد ولی اگر از “@$” استفاده کنید هر آرگومان را به صورت جدا در نظر میگیرد. به دو مثال زیر و خروجی آنها توجه کنید:
مثال اول:
1 2 3 4 5 6 7 |
#!/bin/bash for arg in "$*"; do echo $arg done ======= $ ./test.sh arg1 arg2 arg3 arg4 arg1 arg2 arg3 arg4 |
مثال دوم:
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash for arg in "$*"; do echo $arg done ======= $ ./test.sh arg1 arg2 arg3 arg4 arg1 arg2 arg3 arg4 |
وضعیت خروج
این متغیر وضعیت خروج آخرین دستور زده شده رو به صورت یک عدد به شما نمایش میده. مثلا اگر دستور آخری که اجرا کردید موفقیت آمیز بوده و صحیح بده مقدار ۰ رو بر میگردونه و اگر دستور یا اسکریپت با موفقیت به اجرا در نیامد مقدار ۱- را بر میگرداند.
مثال:
1 2 3 4 5 6 7 |
blog@Arshatech:~$ ./test.sh Alice Bob File Name : ./test.sh First Parameter : Alice Second Parameter : Bob Quoted Values: Alice Bob Quoted Values: Alice Bob Total Number of Parameters : 2 |
سپس به صورت زیر میتوان از صحت دستور اجرا شده اطمینان حاصل کرد:
1 2 |
blog@Arshatech:~$ echo $? 0 |