آموزش لینوکس

در این وبلاگ مطالبی در خصوص سیستم عامل لینوکس به اشتراک گذاشته می شود.

آموزش لینوکس

در این وبلاگ مطالبی در خصوص سیستم عامل لینوکس به اشتراک گذاشته می شود.

بررسی متغیر "؟"

شنبه, ۱ تیر ۱۳۹۸، ۰۱:۳۷ ب.ظ

این متغیر وضعیت اجرای آخرین دستور را توسط یک کد با مقدار 0 تا 255 نشان می دهد. به این کد، کد خروج (Exit Code) نیز می گویند. در صورتی که مقدار متغیر ؟ برابر با صفر شود، بدین معنی است که دستور به درستی اجرا گردیده و در غیر این صورت، نشان دهنده عدم موفقیت اجرای دستور می باشد.

& مقادیر رایج برای متغیر ؟ را در چند مثال بررسی می کنیم.

* مثال 1 : مقدار متغیر ؟ برابر با صفر باشد.

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

[masih@mypc ~]$ date

Wed Jun 19 14:37:11 +0430 2019

[masih@mypc ~]$ echo $?

0

در اینجا دستور date بدون مشکل اجرا شده و زمان سیستم را در خروجی نمایش می دهد. با استفاده از دستور echo به صورت بالا، مقدار فعلی متغیر ؟ مشخص می شود. (برای دیدن مقدار یک متغیر، کافیست نام متغیر بعد از عبارت $ echo در خط فرمان قرار گیرد)

[masih@mypc ~]$ echo $نام متغیر

 

* مثال 2 : مقدار متغیر ؟ برابر با یک باشد.

در صورت بروز خطاهای عمومی در اجرای دستورات، مقدار متغیر ؟ برابر با یک می شود.

[masih@mypc ~]$ cd /root

bash: cd: /root: Permission denied

[masih@mypc ~]$ echo $?

1

در این مثال کاربر masih با استفاده از دستور cd قصد تغییر مکان به دایرکتوری root/ را دارد که به دلیل دارا نبودن سطح دسترسی، دستور اجرا نمی‌شود.

 

* مثال 3 : مقدار متغیر ؟ برابر با 2 باشد.

این حالت در زمانی که از دستورات Bash بصورت نادرست استفاده شود، بروز می دهد.

[masih@mypc ~]$ ls abcdef

ls: cannot access 'abcdef': No such file or directory

[masih@mypc ~]$ echo $?

2

در بالا، اجرای دستور ls برای نشان دادن محتویات دایرکتوری که وجود ندارد، با خطا همراه می‌شود و در نتیجه متغیر ؟ عدد 2 را بر می گرداند. در مثال زیر نیز آرگومان استفاده شده در دستور cd اشتباه می باشد.

[masih@mypc ~]$ cd -w /root

bash: cd: -w: invalid option

cd: usage: cd [-L|[-P [-e]] [-@]] [dir]

[masih@mypc ~]$ echo $?

2

 

* مثال 4 : مقدار متغیر ؟ برابر با 6 باشد.

[masih@mypc ~]$ curl www.learnlinux.ir

curl: (6) Could not resolve host: www.learnlinux.ir

[masih@mypc ~]$ echo $?

6

از ابزار curl برای ارسال و دریافت اطلاعات از طریق URL استفاده می شود. به دلیل عدم شناسایی آدرس توسط دستور curl ، مقدار برگشتی متغیر ؟ برابر با عدد 6 می باشد.

 

* مثال 5 : مقدار متغیر ؟ برابر با 126 باشد.

[masih@mypc ~]$ ll

-rw-------. 1 masih masih   29 Jun 20 12:55 test.sh

[masih@mypc ~]$ ./test.sh

bash: ./test.sh: Permission denied

[masih@mypc ~]$ echo $?

126

فایل test.sh با سطح دسترسی 600، اسکریپتی است که در زمان اجرا بدلیل نداشتن مجوز Execute، با خطا مواجه می‌گردد.

 

* مثال 6 : مقدار متغیر ؟ برابر با 127 باشد.

[masih@mypc ~]$ abcdef

bash: abcdef: command not found

[masih@mypc ~]$ echo $?

127

هر زمان که عبارت وارد شده در خط فرمان برای bash نامفهوم باشد، مقدار متغییر ؟ برابر با 127 می شود.

 

* مثال 7 : چنانچه اجرای یک دستور با بروز سیگنال مختل شود، مقدار متغییر ؟ چگونه محاسبه می شود؟

اگر اجرای یک فرمان با ارسال سیگنال قطع شود، مقدار متغیر ؟ برابر با جمع عدد 128 با شماره آن سیگنال می باشد. با دستور زیر می‌توان لیست سیگنال های سیستم را به همراه شماره ی آن ها دید.

[masih@mypc ~]$ kill -l

 1) SIGHUP           2) SIGINT            3) SIGQUIT         4) SIGILL            5) SIGTRAP

 6) SIGABRT        7) SIGBUS           8) SIGFPE            9) SIGKILL         10) SIGUSR1

11) SIGSEGV       12) SIGUSR2       13) SIGPIPE         14) SIGALRM     15) SIGTERM

16) SIGSTKFLT  17) SIGCHLD      18) SIGCONT      19) SIGSTOP        20) SIGTSTP

21) SIGTTIN        22) SIGTTOU       23) SIGURG         24) SIGXCPU       25) SIGXFSZ

26) SIGVTALRM                27) SIGPROF       28) SIGWINCH     29) SIGIO          30) SIGPWR

31) SIGSYS          34) SIGRTMIN    35) SIGRTMIN+1         36) SIGRTMIN+2        37) SIGRTMIN+3

38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6     41) SIGRTMIN+7      42) SIGRTMIN+8

43) SIGRTMIN+9   44) SIGRTMIN+10     45) SIGRTMIN+11     46) SIGRTMIN+12     47) SIGRTMIN+13

48) SIGRTMIN+14   49) SIGRTMIN+15    50) SIGRTMAX-14   51) SIGRTMAX-13     52) SIGRTMAX-12

53) SIGRTMAX-11    54) SIGRTMAX-10  55) SIGRTMAX-9      56) SIGRTMAX-8      57) SIGRTMAX-7

58) SIGRTMAX-6    59) SIGRTMAX-5      60) SIGRTMAX-4       61) SIGRTMAX-3      62) SIGRTMAX-2

63) SIGRTMAX-1       64) SIGRTMAX

 برای نمایش وضعیت متغیر ؟ در زمان قطع اجرای یک دستور توسط سیگنال، بصورت زیر عمل می کنیم. 

در ترمینال اول دستور زیرا اجرا می شود. دستور sleep سبب ایجاد تأخیر و عدم دسترسی به خط فرمان به مدت 500 ثانیه می گردد.

[masih@mypc ~]$ sleep 500

در ترمینال دیگری دستور ps را اجرا می کنیم. با اینکار شماره PID دستور sleep بدست می آید.

[masih@mypc ~]$ ps -a

 PID TTY          TIME CMD

 4210 pts/1    00:00:00 sleep

 4211 pts/2    00:00:00 ps

با اجرای دستور زیر فرایند انجام دستور sleep با ارسال سیگنال شماره 5 ملغی می شود.

[masih@mypc ~]$ kill -s 5 4210

در ترمینال اول پیغام زیر نمایش داده شده و خط فرمان در اختیار کاربر قرار می گیرد. در نهایت متغیر ؟ از جمع اعداد 128 و 5 برابر با 133 می‌شود.

Trace/breakpoint trap (core dumped)

[masih@mypc ~]$ echo $?

133

 

* مثال 8 : مقدار متغیر ؟ برابر با 130 باشد.

[masih@mypc ~]$ cp learnlinux.pdf  /Desktop

^C

[masih@mypc ~]$ echo $?

130

در دستور بالا اجرای فرایند کپی، توسط کلیدهای Ctrl+c لغو می شود. متغیر ؟ در این حالت برابر با 130 شده که این مقدار از جمع عدد 128 با شماره سیگنال SIGINT بدست می آید.

 

* مثال 9 : مقدار متغیر ؟ برابر با 148 باشد.

[masih@mypc ~]$ cp learnlinux.pdf  /Desktop

^Z

[masih@mypc ~]$ echo $?

148

در دستور بالا اجرای فرایند کپی، توسط کلیدهای Ctrl+z متوقف می شود. مقدار متغیر ؟ در این حالت برابر با 148 می شود.

 

* مثال 10 : استفاده از متغیر ؟ در اسکریپت.

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

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

[masih@mypc ~]$ vi script.sh

touch /root/file_test

if [ $? =  0 ]

then

echo " Succeeded to created file"

else

echo "Could not create file"

fi

[masih@mypc ~]$ ./script.sh

touch: cannot touch '/root/file_test': Permission denied

Could not create file

[root@mypc ~]$ /home/masih/script.sh

Succeeded to created file

مشخص است که اجرای اسکریپت توسط کاربر masih به دلیل عدم مجوز دسترسی این کاربر به مسیر root/ با خطا همراه بوده و پیغام عدم ساخت فایل در خروجی نمایش داده می شود. و در مقابل اجرای اسکریپت توسط کاربر root به درستی انجام گرفته و پیغام ساخته شدن فایل نمایش می یابد.



۹۸/۰۴/۰۱
عیسی اسداله پور

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی