فرمان تست میتواند در خط فرمان لینوکس برای مقایسه یک عنصر با دیگری استفاده شود، اما معمولا در اسکریپتهای پوسته BASH به عنوان بخشی از اظهارات شرطی که کنترل جریان منطق و برنامه را کنترل میکنند استفاده میشود.
مثال پایه
شما می توانید این دستورات را به سادگی با باز کردن یک پنجره ترمینال امتحان کنید .
آزمون 1-eq 2 && echo "بله" || اکو "نه"
فرمان بالا می تواند به صورت زیر تقسیم شود:
- تست - این بدان معنی است که شما در حال انجام مقایسه هستید
- 1 - اولین عنصری که می خواهید مقایسه کنید
- -q (در مقایسه با شما مقایسه می کنید، در این صورت، شما آزمایش می کنید که آیا یک عدد برابر با دیگری است)
- 2 - عنصری که عنصر اول را دوباره مقایسه می کنید
- && - اگر نتیجه درست باشد، دستور زیر را اجرا کنید
- echo "yes" - دستور اجرا، اگر مقایسه درست باشد
- || - اگر نتیجه نادرست باشد، دستور زیر را اجرا کنید
- echo "no" - دستور اجرا اگر مقایسات نادرست باشد
در اصل، فرمان برابر 1 تا 2 است و آنها با دستور اکو «بله» اجرا می شوند که «yes» را نمایش می دهند و اگر با دستور echo "no" اجرا نشوند، نمایش "no" را نشان می دهد.
مقایسه مقادیر
اگر عناصری را که به عنوان اعداد تجزیه می شوند مقایسه می کنید، می توانید از اپراتورهای مقایسه زیر استفاده کنید:
- -eq - ارزش 1 مقدار برابر 2
- -ge - مقدار 1 بزرگتر یا برابر با مقدار 2 است
- -gt - مقدار 1 بزرگتر از مقدار 2 است
- -le - مقدار 1 کمتر از یا برابر با مقدار 2 است
- -lt - مقدار 1 کمتر از مقدار 2 است
- -ne - ارزش 1 مقدار برابر نیست 2
مثال ها:
آزمون 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)
مقایسه متن
اگر عناصر را تجزیه کنید به عنوان رشته ها، شما می توانید از اپراتورهای مقایسه زیر استفاده کنید:
- = - رشته رشته 1 match string 2 را می دهد
- ! = - رشته 1 متفاوت با رشته 2 است
- -n - طول رشته بزرگتر از 0 است
- -z - رشته طول 0 است
مثال ها:
آزمون "string1" = "string2" && echo "بله" || اکو "نه"
(نمایش "هیچ" به صفحه نمایش داده می شود زیرا "string1" برابر نیست "string2")
آزمون "string1"! = "string2" && echo "بله" || اکو "نه"
(صفحه "yes" را به صفحه نمایش می دهد زیرا "string1" برابر نیست "string2")
test -n "string1" && echo "yes" || اکو "نه"
(صفحه "yes" را به صفحه نمایش می دهد زیرا "string1" دارای طول رشته بیشتر از صفر است)
test -z "string1" && echo "yes" || اکو "نه"
(صفحه نمایش "هیچ" به صفحه نمایش داده می شود زیرا "string1" دارای طول رشته بیشتر از صفر است)
مقایسه فایل ها
اگر فایل ها را مقایسه می کنید می توانید اپراتورهای مقایسه زیر را استفاده کنید:
- -ef - آیا فایل ها دارای همان دستگاه و تعداد inode هستند (آیا آنها یک فایل هستند)
- -nt - اولین فایل جدیدتر از فایل دوم است
- -ot - اولین فایل قدیمی تر از فایل دوم است
- -b - فایل موجود است و خاص است
- -c - این فایل وجود دارد و شخصیت خاص است
- -d - فایل موجود است و یک دایرکتوری است
- -e - فایل موجود است
- -f - فایل موجود است و یک فایل منظم است
- -g - فایل موجود است و شماره گروه مشخص شده دارد
- -G - این فایل وجود دارد و صاحب آن توسط گروه کاربر
- -h - این فایل وجود دارد و یک لینک نمادین است
- -k - فایل موجود است و دارای بیت چسبنده است
- -L- همانند -h
- -O - فایل وجود دارد شما مالک هستید
- -p - فایل موجود است و یک لوله نامیده می شود
- -r - فایل موجود است و قابل خواندن است
- -s - این فایل وجود دارد و دارای اندازه بزرگتر از صفر است
- -S - این فایل وجود دارد و یک سوکت است
- -t - توصیفگر فایل در یک ترمینال باز می شود
- -u - فایل موجود است و بیت set-user-id تنظیم شده است
- -w - این فایل وجود دارد و قابل نوشتن است
- -x - فایل موجود است و قابل اجرا است
مثال ها:
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 وجود ندارد"
خلاصه
فرمان تست در اسکریپت ها مفید است زیرا شما می توانید مقدار یک متغیر را نسبت به دیگری و جریان برنامه کنترل کنید. در خط فرمان استاندارد، می توانید از آن برای تست اینکه آیا یک فایل وجود دارد یا خیر، استفاده کنید