نحوه استفاده از شرایط آزمایش در یک اسکریپ Bash

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

مثال پایه

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

آزمون 1-eq 2 && echo "بله" || اکو "نه"

فرمان بالا می تواند به صورت زیر تقسیم شود:

در اصل، فرمان برابر 1 تا 2 است و آنها با دستور اکو «بله» اجرا می شوند که «yes» را نمایش می دهند و اگر با دستور echo "no" اجرا نشوند، نمایش "no" را نشان می دهد.

مقایسه مقادیر

اگر عناصری را که به عنوان اعداد تجزیه می شوند مقایسه می کنید، می توانید از اپراتورهای مقایسه زیر استفاده کنید:

مثال ها:

آزمون 1-eq 2 && echo "بله" || اکو "نه"

(نمایش "هیچ" به صفحه نمایش، زیرا 1 برابر نیست 2)

تست 1 -ge 2 && echo "بله" || اکو "نه"

(صفحه نمایش "هیچ" به صفحه نمایش داده می شود زیرا 1 بزرگتر یا برابر با 2 نیست)

تست 1 -gt 2 && echo "بله" || اکو "نه"

(صفحه نمایش "هیچ" به صفحه نمایش داده می شود زیرا 1 بزرگتر از 2 نیست)

تست 1 و 2 و & echo "بله" || اکو "نه"

(صفحه "yes" را به صفحه نمایش می دهد زیرا 1 کمتر از 2 برابر یا برابر است)

تست 1 -tt 2 && echo "بله" || اکو "نه"

(صفحه "yes" را به صفحه نمایش می دهد زیرا 1 کمتر از 2 برابر یا برابر است)

تست 1 -ne 2 && echo "بله" || اکو "نه"

(صفحه "yes" را به صفحه نمایش می دهد زیرا 1 برابر نیست 2)

مقایسه متن

اگر عناصر را تجزیه کنید به عنوان رشته ها، شما می توانید از اپراتورهای مقایسه زیر استفاده کنید:

مثال ها:

آزمون "string1" = "string2" && echo "بله" || اکو "نه"

(نمایش "هیچ" به صفحه نمایش داده می شود زیرا "string1" برابر نیست "string2")

آزمون "string1"! = "string2" && echo "بله" || اکو "نه"

(صفحه "yes" را به صفحه نمایش می دهد زیرا "string1" برابر نیست "string2")

test -n "string1" && echo "yes" || اکو "نه"

(صفحه "yes" را به صفحه نمایش می دهد زیرا "string1" دارای طول رشته بیشتر از صفر است)

test -z "string1" && echo "yes" || اکو "نه"

(صفحه نمایش "هیچ" به صفحه نمایش داده می شود زیرا "string1" دارای طول رشته بیشتر از صفر است)

مقایسه فایل ها

اگر فایل ها را مقایسه می کنید می توانید اپراتورهای مقایسه زیر را استفاده کنید:

مثال ها:

test / path / to / file1 -n / path / to / file2 && echo "yes"

(اگر file1 جدیدتر از file2 باشد، کلمه "yes" نمایش داده خواهد شد)

test -e / path / to / file1 && echo "yes"

(اگر file1 وجود داشته باشد کلمه "yes" نمایش داده خواهد شد)

تست -O / مسیر / به / file1 && echo "بله"

(اگر شما فایل1 دارید، کلمه "بله" نمایش داده می شود ")

واژه شناسی

مقایسه شرایط چندگانه

تا کنون همه چیز در مقایسه با یک چیز دیگر مقایسه شده است، اما اگر شما می خواهید دو شرایط را مقایسه کنید.

به عنوان مثال، اگر یک حیوان دارای 4 پا و "مو" باشد، احتمالا یک گاو است. به سادگی برای 4 پا بررسی می کند که شما گاو را تضمین نمی کند، اما چک کردن صدا آن را قطعا می کند.

برای تست هر دو شرایط در یک بار از عبارت زیر استفاده کنید:

test 4 -equ 4 -a "moo" = "moo" && echo "این یک گاو است" || اکو "این یک گاو نیست"

بخش اصلی این است که -a که برای و برای.

یک روش بهتر و رایج برای انجام یک آزمون وجود دارد و این به شرح زیر است:

آزمون 4 - آزمون 4 && آزمون "moo" = "moo" && echo "یک گاو است" || اکو "این یک گاو نیست"

یکی دیگر از تستهایی که ممکن است بخواهید ایجاد کنید، مقایسه دو جمله است و اگر یک رشته صادق باشد، خروجی درست است. برای مثال، اگر شما می خواهید بررسی کنید که یک فایل با نام "file1.txt" وجود دارد یا یک فایل با نام "file1.doc" وجود دارد، می توانید از دستور زیر استفاده کنید

test -e file1.txt -o -e file1.doc && echo "file1 exists" || echo "file1 وجود ندارد"

بخش اصلی این است که -o که برای و یا.

یک روش بهتر و رایج برای انجام یک آزمون وجود دارد و این به شرح زیر است:

test -e file1.txt || test -e file1.doc && echo "file1 exists" || echo "file1 وجود ندارد"

حذف کلید واژه تست

شما واقعا نمیتوانید از تست کلمه برای انجام مقایسه استفاده کنید. همه چیزهایی که باید انجام دهید این است که بیانیه را به صورت مربع به صورت زیر قرار دهید:

[-e file1.txt] && echo "file1 exists" || echo "file1 وجود ندارد"

[و] اساسا معنی آن همانند آزمون است.

حالا شما می دانید این را می توانید در مقایسه شرایط مختلف به صورت زیر بهبود دهید:

[4-qq 4] && ["moo" = "moo"] && echo "یک گاو است" || اکو "این یک گاو نیست"

[-e file1.txt] || [-e file1.doc] && echo "file1 exists" || echo "file1 وجود ندارد"

خلاصه

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