Тестовата команда може да се използва на командния ред на Linux, за да се сравни един елемент с друг, но е по-често използван в BASH скриптове като част от условни изявления, които контролират логиката и програмния поток.
Основен пример
Можете да пробвате тези команди просто като отворите терминален прозорец .
тест 1 -ек 2 & & echo "да" || ехо "не"
Горната команда може да бъде разбита по следния начин:
- тест - това означава, че ще извършите сравнение
- 1 - първият елемент, който ще сравнявате
- -ек (как сравнявате, в този случай тествате дали едно число е равно на друго)
- 2 - елемент, който сравнявате отново първия елемент
- && - изпълнете следното изречение, ако резултатът е вярно
- echo "yes" - командата за изпълнение, ако сравнението се върне вярно
- || - изпълнете следното изявление, ако резултатът е невярно
- echo "no" - командата да се изпълни, ако сравнението върне невярно
По същество командата сравнява от 1 до 2 и съвпада с израза "да", който показва "да" и ако не съвпадат, е изпълнено изявление "не", което показва "не".
Сравняване на числата
Ако сравнявате елементи, които се анализират като номера, можете да използвате следните оператори за сравнение:
- -eq - има стойност 1 еднаква стойност 2
- -ge - е стойност 1 по-голяма или равна на стойност 2
- -gt - е стойност 1 по-голяма от стойност 2
- -le - е стойност 1 по-малка или равна на стойност 2
- -lt - е стойност 1 по-малка от стойност 2
- -ne - стойността 1 не е еднаква 2
Примери:
тест 1 -ек 2 & & echo "да" || ехо "не"
(показва "не" на екрана, защото 1 не е равен на 2)
тест 1 - изречение 2 & & echo "да" || ехо "не"
(показва "не" на екрана, защото 1 не е по-голяма или равна на 2)
тест 1 -gt 2 && echo "да" || ехо "не"
(показва "не" на екрана, защото 1 не е по-голямо от 2)
тест 1-ви 2 & & echo "да" || ехо "не"
(показва "да" на екрана, защото 1 е по-малко или равно на 2)
тест 1 -lt 2 && echo "да" || ехо "не"
(показва "да" на екрана, защото 1 е по-малко или равно на 2)
тест 1-не 2 && ехо "да" || ехо "не"
(показва "да" на екрана, защото 1 не е равно на 2)
Сравняване на текста
Ако сравнявате елементи, които се анализират като струни, можете да използвате следните оператори за сравнение:
- = - низ 1 съвпада с низ 2
- ! = - е низ 1 различен от низ 2
- -n - дължината на низа е по-голяма от 0
- -z - е дължината на низа 0
Примери:
тест "string1" = "string2" && echo "да" || ехо "не"
(показва "не" на екрана, защото "string1" не е равен на "string2")
тест "string1"! = "string2" && echo "да" || ехо "не"
(показва "да" на екрана, защото "string1" не е равен на "string2")
test -n "string1" && echo "да" || ехо "не"
(показва "да" на екрана, защото "string1" има дължина на низ, по-голяма от нула)
тест -z "string1" && echo "да" || ехо "не"
(показва "не" на екрана, защото "string1" има дължина на низове по-голяма от нула)
Сравняване на файлове
Ако сравнявате файлове, можете да използвате следните оператори за сравнение:
- -ef - Файловете имат едно и също устройство и номера за вход (са един и същ файл)
- -nt - Първият файл е по-нов от втория
- -ot - Първият файл е по-стар от втория
- -b - Файлът съществува и е специален
- -c - Файлът съществува и има особен характер
- -d - Файлът съществува и е директория
- -е - Файлът съществува
- -f - Файлът съществува и е обикновен файл
- -g - Файлът съществува и има определен номер на група
- -G - Файлът съществува и собственикът от групата потребители
- -h - Файлът съществува и представлява символна връзка
- -k - Файлът съществува и има залепен бит
- -L - Същото като -h
- -O - Файлът съществува, вие сте собственикът
- -p - Файлът съществува и е кръстен
- -r - Файлът съществува и може да се чете
- -s - Файлът съществува и има размер по-голям от нула
- -S - Файлът съществува и е socket
- -t - Файловият дескриптор се отваря на терминал
- -u - Файлът съществува и е зададен битов идентификатор за зададен потребител
- -w - Файлът съществува и е написан
- -x - Файлът съществува и е изпълним
Примери:
тест / път / към / файл1 -n / път / към / файл2 && ехо "да"
(Ако файлът1 е по-нов от файла2, тогава ще се появи думата "да")
test -e / path / to / file1 & & echo "да"
(ако file1 съществува думата "yes" ще се покаже)
тест -O / път / към / файл1 & & echo "да"
(ако притежавате файла1, тогава се показва думата "да")
терминология
- Блок специално - Файлът е блок устройство, което означава, че данните се четат в блокове от байтове. Това обикновено са устройства, като твърди дискове.
- Специален символ - Файлът се задейства незабавно, когато го напишете и обикновено е устройство като сериен порт
Сравняване на множество условия
Досега всичко е сравнявало едно нещо срещу друго, но какво, ако искате да сравните две условия.
Например, ако едно животно има 4 крака и отива "moo", това вероятно е крава. Просто проверката за 4 крака не гарантира, че имате крава, но проверявате звука, който непременно прави.
За да тествате двете условия едновременно, използвайте следното изявление:
тест 4 -eq 4 -a "moo" = "moo" && echo "това е крава" || ехо "това не е крава"
Основната част тук е -a, която означава и.
Има по-добър и по-често използван начин за извършване на същия тест, а именно:
тест 4 -eq 4 && тест "moo" = "moo" && echo "това е крава" || ехо "това не е крава"
Друг тест, който бихте искали да направите, е да сравнявате две твърдения и ако някой от тях е истински изходен низ. Например, ако искате да проверите дали файл, наречен "file1.txt" съществува или файл, наречен "file1.doc", можете да използвате следната команда
test -e file1.txt -o -e файл1.doc && echo "file1 съществува" || echo "file1 не съществува"
Основната част тук е -о, което означава или.
Има по-добър и по-често използван начин за извършване на същия тест, а именно:
test -e file1.txt || test -e file1.doc && echo "file1 съществува" || echo "file1 не съществува"
Премахване на тестовата ключова дума
Всъщност не е нужно да използвате теста на думата, за да извършите сравнението. Всичко, което трябва да направите, е да приложете изявлението в квадратни скоби, както следва:
[-e file1.txt] && echo "file1 съществува" || echo "file1 не съществува"
[И] основно означава същото като теста.
Сега знаете това, което можете да подобрите при сравняване на няколко условия, както следва:
[4 -eq 4] && ["moo" = "moo"] && echo "това е крава" || ехо "това не е крава"
[-e file1.txt] || [-e file1.doc] && echo "file1 съществува" || echo "file1 не съществува"
резюме
Тестовата команда е по-полезна в скриптовете, защото можете да тествате стойността на една променлива спрямо друга и да управлявате потока от програми. На стандартния команден ред можете да го използвате, за да проверите дали файлът съществува или