ایستگاه های کاری آنلاین OnWorks Linux و Windows

لوگو

میزبانی آنلاین رایگان برای ایستگاه های کاری

<قبلی | فهرست | بعدی>

ترکیب عبارات

همچنین ترکیب عبارات برای ایجاد ارزیابی های پیچیده تر امکان پذیر است. عبارات با استفاده از عملگرهای منطقی ترکیب می شوند. ما اینها را در فصل 17 دیدیم، زمانی که در مورد آن مطلع شدیم پیدا کردن فرمان سه عملیات منطقی برای وجود دارد آزمون و [[]]. آنها AND، OR و NOT هستند. آزمون و [[]] از عملگرهای مختلف برای نمایش این عملیات استفاده کنید:


جدول 27-4: عملگرهای منطقی


عمل TESt [[ ]] و (( ))

عمل TESt [[ ]] و (( ))

و -آ &&


تصویر

OR -o ||


تصویر

نه ! !


تصویر


در اینجا نمونه ای از عملیات AND آورده شده است. اسکریپت زیر تعیین می کند که آیا یک عدد صحیح در محدوده ای از مقادیر قرار دارد یا خیر:



#! / bin / bash


# test-integer3: تعیین کنید که آیا یک عدد صحیح در a است یا خیر

# محدوده مشخص شده از مقادیر.


MIN_VAL=1 MAX_VAL=100


INT=50

#! / bin / bash


# test-integer3: تعیین کنید که آیا یک عدد صحیح در a است یا خیر

# محدوده مشخص شده از مقادیر.


MIN_VAL=1 MAX_VAL=100


INT=50



اگر [[ "$INT" =~ ^-?[0-9]+$ ]]; سپس

اگر [[ INT -ge MIN_VAL && INT -le MAX_VAL ]]; سپس تکرار کنید "$INT بین $MIN_VAL تا MAX_VAL $ است."

دیگر

echo "$INT خارج از محدوده است."

فی دیگری

echo "INT یک عدد صحیح نیست." >&2 خروج 1

fi


اگر [[ "$INT" =~ ^-?[0-9]+$ ]]; سپس

اگر [[ INT -ge MIN_VAL && INT -le MAX_VAL ]]; سپس تکرار کنید "$INT بین $MIN_VAL تا MAX_VAL $ است."

دیگر

echo "$INT خارج از محدوده است."

فی دیگری

echo "INT یک عدد صحیح نیست." >&2 خروج 1

fi


در این اسکریپت، مقدار عدد صحیح را تعیین می کنیم INT بین مقادیر قرار دارد MIN_VAL و MAX_VAL. این با یک بار استفاده انجام می شود [[]]، که شامل دو عبارت است که با && اپراتور. ما همچنین می توانستیم با استفاده از آن کدگذاری کنیم آزمون:


if [ $INT -ge $MIN_VAL -a $INT -le $MAX_VAL ]; سپس تکرار کنید "$INT بین $MIN_VAL تا MAX_VAL $ است."

دیگر

echo "$INT خارج از محدوده است."

fi

if [ $INT -ge $MIN_VAL -a $INT -le $MAX_VAL ]; سپس تکرار کنید "$INT بین $MIN_VAL تا MAX_VAL $ است."

دیگر

echo "$INT خارج از محدوده است."

fi


La ! عملگر نفی نتیجه یک عبارت را معکوس می کند. اگر یک عبارت false باشد true را برمی‌گرداند و اگر یک عبارت درست باشد false را برمی‌گرداند. در اسکریپت زیر، منطق ارزیابی خود را برای یافتن مقادیر آن تغییر می دهیم INT که خارج از محدوده مشخص شده هستند:



#! / bin / bash


# test-integer4: تعیین کنید که آیا یک عدد صحیح خارج از a است یا خیر

# محدوده مشخص شده از مقادیر.


MIN_VAL=1 MAX_VAL=100


INT=50


اگر [[ "$INT" =~ ^-?[0-9]+$ ]]; سپس

اگر [[ ! (INT -ge MIN_VAL && INT -le MAX_VAL) ]]; سپس "$INT خارج از $MIN_VAL تا MAX_VAL است."

دیگر

echo "$INT در محدوده است."

#! / bin / bash


# test-integer4: تعیین کنید که آیا یک عدد صحیح خارج از a است یا خیر

# محدوده مشخص شده از مقادیر.


MIN_VAL=1 MAX_VAL=100


INT=50


اگر [[ "$INT" =~ ^-?[0-9]+$ ]]; سپس

اگر [[ ! (INT -ge MIN_VAL && INT -le MAX_VAL) ]]; سپس "$INT خارج از $MIN_VAL تا MAX_VAL است."

دیگر

echo "$INT در محدوده است."



echo "INT یک عدد صحیح نیست." >&2 خروج 1

fi


echo "INT یک عدد صحیح نیست." >&2 خروج 1

fi

ما همچنین پرانتزهایی را در اطراف عبارت برای گروه بندی قرار می دهیم. اگر اینها شامل نمی شد، نفی فقط برای عبارت اول اعمال می شد و نه ترکیب این دو. کدگذاری این با آزمون به این صورت انجام خواهد شد:


اگر [ ! \( $INT -ge $MIN_VAL -a $INT -le $MAX_VAL \) ]; سپس "$INT خارج از $MIN_VAL تا MAX_VAL است."

دیگر

echo "$INT در محدوده است."

fi

اگر [ ! \( $INT -ge $MIN_VAL -a $INT -le $MAX_VAL \) ]; سپس "$INT خارج از $MIN_VAL تا MAX_VAL است."

دیگر

echo "$INT در محدوده است."

fi


از آنجایی که تمام عبارات و عملگرهای استفاده شده توسط آزمون توسط پوسته به عنوان آرگومان های فرمان در نظر گرفته می شوند (بر خلاف [[]] و (( )) ) کاراکترهایی که معنای خاصی دارند بر هم زدن، از جمله <, >, (و )، باید نقل شود یا فرار کرد.

تصویر

دیدن آن آزمون و [[]] تقریباً همان کار را انجام دهید، کدام ارجح است؟ آزمون سنتی است (و بخشی از POSIX)، در حالی که [[]] خاص است بر هم زدن. دانستن نحوه استفاده بسیار مهم است آزمون، از آنجایی که بسیار مورد استفاده قرار می گیرد، اما [[]] به وضوح مفیدتر است و کدنویسی آن آسان تر است، بنابراین برای اسکریپت های مدرن ترجیح داده می شود.


حمل و نقل هابگوبلین ذهن های کوچک است

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

افراد یونیکس دلایل خوبی برای این باور دارند. با مشاهده آنچه که بسط های اختصاصی دستورات و پوسته ها با دنیای یونیکس قبل از POSIX انجام داد، طبیعتاً نسبت به تأثیر لینوکس بر سیستم عامل مورد علاقه خود محتاط هستند.

اما قابل حمل بودن یک نقطه ضعف جدی دارد. مانع پیشرفت می شود. این مستلزم آن است که کارها همیشه با استفاده از تکنیک‌های «کمترین مخرج مشترک» انجام شوند. در مورد برنامه نویسی پوسته، به این معنی است که همه چیز را با آن سازگار کنید sh، پوسته اصلی بورن.



تصویر

این جنبه منفی بهانه ای است که فروشندگان نرم افزار اختصاصی برای توجیه برنامه های افزودنی اختصاصی خود استفاده می کنند، فقط آنها آنها را "نوآوری" می نامند. اما آنها در واقع فقط دستگاه های قفل شده برای مشتریان خود هستند.

ابزارهای گنو، مانند بر هم زدن، چنین محدودیتی ندارند. آنها با پشتیبانی از استانداردها و با در دسترس بودن جهانی، قابلیت حمل را تشویق می کنند. می توانید نصب کنید بر هم زدن و سایر ابزارهای گنو روی تقریباً هر نوع سیستمی، حتی ویندوز، بدون هزینه. پس با خیال راحت از تمامی امکانات استفاده کنید بر هم زدن. این است واقعا قابل حمل


برترین سیستم عامل Cloud Computing در OnWorks: