Як використовувати умови тестування в сценарії Bash
The Linuxвипробування команда порівнює один елемент з іншим, але вона частіше використовується в Скрипти оболонки BASH як частина умовні висловлювання які контролюють логіку та хід програми.
Основний приклад

Спробуйте виконати ці команди вікно терміналу.
тест 1 -eq 2 && echo "так" || відлуння "ні"
Наведена вище команда розбивається так:
- випробування: Команда для виконання порівняння
- 1:Перший елемент, який ви збираєтеся порівняти. У цьому прикладі це число 1 але це може бути будь-яке число або рядок у лапках.
- -екв: Метод порівняння. У цьому випадку ви перевіряєте, чи дорівнює одне значення іншому.
- 2: елемент, з яким ви порівнюєте перший елемент. У цьому прикладі це число 2.
- &&: ярлик Linux для послідовного з’єднання команд. Вихідні дані з тестових ланцюжків для команд, які слідують. Подвійний амперсанд виконується, коли команда, що передує йому, має статус виходу 0, що є химерним способом сказати, що команда не завершилася.
-
луна "так":Команда для запуску, якщо порівняння пройшло успішно. У цьому випадку все, що ми робимо, це запитуємо
- ||: Певною мірою навпаки &&; подвійний канал виконується лише в тому випадку, якщо команда, що передує йому, зазнає невдачі (має статус виходу, який не дорівнює 0).
- відлуння "ні": Команда для запуску, якщо порівняння не вдалось.
Запустити з підказки оболонки, випробування не повертає значення до стандартного виводу, він просто повертає код статусу виходу. Ось чому необхідна ланцюжок команди echo.

По суті, команда порівнює 1 з 2, і якщо вони збігаються, виконується оператор echo "yes" який відображає "так", і якщо вони не збігаються, виконується оператор echo "no", який відображає "немає."
Порівняння чисел
Якщо ви порівнюєте елементи, які аналізуються як числа, ви можете використовувати такі оператори порівняння:
- -екв: значення 1 дорівнює значенню 2
- -ge: значення 1 більше або дорівнює значенню 2
- -gt: значення 1 більше, ніж значення 2
- -ле: значення 1 менше або дорівнює значенню 2
- -lt: значення 1 менше значення 2
- -не: значення 1 не дорівнює значенню 2
Приклад тестів
тест 1 -eq 2 && echo "так" || відлуння "ні"
(на екрані відображається «ні», оскільки 1 не дорівнює 2)
тест 1 -ge 2 && echo "так" || відлуння "ні"
(на екрані відображається «ні», оскільки 1 не більше або не дорівнює 2)
тест 1 -gt 2 && echo "так" || відлуння "ні"
(на екрані відображається «ні», оскільки 1 не більше 2)
тест 1 -le 2 && echo "так" || відлуння "ні"
(на екрані відображається «так», оскільки 1 менше або дорівнює 2)
тест 1 -lt 2 && echo "так" || відлуння "ні"
(на екрані відображається «так», оскільки 1 менше або дорівнює 2)
тест 1 -ne 2 && echo "так" || відлуння "ні"
(відображає на екрані "так", тому що 1 не дорівнює 2)
Порівняння тексту
Коли ви порівнюєте елементи, які аналізуються як рядки, використовуйте такі оператори порівняння:
- =: рядок 1 відповідає рядку 2
- !=: рядок 1 не відповідає рядку 2
- -n: довжина рядка більше 0
- -z: довжина рядка дорівнює 0
Приклади
test "string1" = "string2" && echo "yes" || відлуння "ні"
(на екрані відображається «ні», оскільки «рядок1» не дорівнює «рядку2»)
test "string1" != "string2" && echo "yes" || відлуння "ні"
(відображає на екрані "так", оскільки "рядок1" не дорівнює "рядку2")
test -n "рядок1" && echo "так" || відлуння "ні"
(відображає на екрані "так", оскільки "рядок1" має довжину рядка більше нуля)
test -z "рядок1" && echo "так" || відлуння "ні"
(відображає на екрані «ні», оскільки «string1» має довжину рядка більше нуля)
Порівняння файлів
Коли ви порівнюєте файли, використовуйте такі оператори порівняння:
- -еф: файли мають однакові номери пристроїв та індексних дескрипторів (чи це той самий файл)
- -nt: перший файл новіший за другий файл
- -от: перший файл старший за другий файл
- -б: файл існує і є блок спец
- -c: файл існує і є характер особливий
- -d: файл існує і є каталогом
- -е: файл існує
- -f: файл існує і є звичайним файлом
- -г: файл існує і має вказаний номер групи
- -Г: файл існує та є власником групи користувачів
- -h або -Л: файл існує і є a символічне посилання
- -к: файл існує і має встановлений біт
- -О: файл існує, ви є власником
- -стр: файл існує і є іменованим каналом
- -r: файл існує і його можна читати
- -s: файл існує і має розмір більше нуля
- -С: файл існує і є a розетка
- -т: дескриптор файлу відкривається на a термінал
- -u: файл існує і встановлено біт set-user-id
- -w: файл існує і доступний для запису
- -x: файл існує і є виконуваним
Приклади
test /path/to/file1 -nt /path/to/file2 && echo "так"
(Якщо файл1 новіший за файл2, то буде відображатися слово "так")
test -e /path/to/file1 && echo "так"
(якщо файл1 існує, буде відображатися слово "так")
test -O /шлях/до/файлу1 && echo "так"
(якщо у вас є файл1, відображається слово "так")
Блок спец: Файл є блоковим пристроєм, що означає, що дані зчитуються блоками байтів. Зазвичай це файли пристроїв, наприклад жорсткі диски.
Особливий характер: файли діють негайно, коли ви пишете в нього, і зазвичай це такий пристрій, як послідовний порт
Порівняння кількох умов
Досі все порівнювало одне з іншим, але що, якщо ви хочете порівняти дві умови?
Наприклад, якщо тварина має чотири ноги і «мукає», це, ймовірно, корова. Проста перевірка наявності чотирьох ніг не гарантує, що у вас є корова, але перевірка звуку, який вона видає, безсумнівно.
Щоб перевірити обидві умови одночасно, скористайтеся таким твердженням:
тест 4 -eq 4 -a "moo" = "moo" && echo "це корова" || луна "це не корова"
Ключовою частиною тут є -а прапор, що означає і.
Існує кращий і більш поширений спосіб виконання того ж тесту, а саме:
test 4 -eq 4 && test "moo" = "moo" && echo "це корова" || луна "це не корова"
Слідкуйте за гілками!
Розгалуження випробування команда має значення. Якщо перший тест (4 = 4) не вдався, то випробування команда закінчується ненульовим кодом виходу. Таким чином, ми переходимо до символу подвійної труби і «це не корова» виводить на стандартний вихід. Однак, якщо перше випробування вдалось і таким чином випробування призводить до коду виходу 0, потім переходимо до першого подвійного амперсанда. Наступне твердження є ще однією умовою перевірки!
Якщо другий тест не вдався, ми знову переходимо до дабл-пайпу і продовжуємо звідти. Якщо, однак, другий тест буде успішним, ми переходимо до другого оператора подвійного амперсанда, який у цей приклад просто передає "це корова" до стандартного виводу, а потім повертається до оболонки підказка.
Інший тест порівнює два твердження, і якщо будь-який з них істинний, виводить рядок. Наприклад, щоб перевірити, чи існує файл з назвою "file1.txt" або файл під назвою "file1.doc", можна скористатися такою командою:
test -e file1.txt -o -e file1.doc && echo "файл1 існує" || echo "файл 1 не існує"
Ключовою частиною тут є -о що означає або.
Існує кращий і більш поширений спосіб виконання того ж тесту, а саме:
test -e file1.txt || test -e file1.doc && echo "файл1 існує" || echo "файл 1 не існує"
Видалення ключового слова Test
Вам насправді не потрібно вживати це слово випробування виконати порівняння. Все, що вам потрібно зробити, це помістити заяву в квадратні дужки так:
[ -e file1.txt ] && echo "файл1 існує" || echo "файл 1 не існує"
The [ і ] в основному означає те саме, що випробування.
Тепер ви знаєте, що ви можете покращити порівняння кількох умов наступним чином:
[ 4 -eq 4 ] && [ "moo" = "moo" ] && echo "це корова" || луна "це не корова"
[ -e файл1.txt ] || [ -e file1.doc ] && echo "файл1 існує" || echo "файл 1 не існує"
Резюме
Команда test є більш корисною в сценаріях, оскільки ви можете перевірити значення однієї змінної проти іншої та контролювати хід програми. У командному рядку використовуйте його, щоб перевірити, чи існує файл чи ні.