Как да използвате тестовите условия в рамките на скрипт Bash

Тестовата команда може да се използва на командния ред на Linux, за да се сравни един елемент с друг, но е по-често използван в BASH скриптове като част от условни изявления, които контролират логиката и програмния поток.

Основен пример

Можете да пробвате тези команди просто като отворите терминален прозорец .

тест 1 -ек 2 & & echo "да" || ехо "не"

Горната команда може да бъде разбита по следния начин:

По същество командата сравнява от 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)

Сравняване на текста

Ако сравнявате елементи, които се анализират като струни, можете да използвате следните оператори за сравнение:

Примери:

тест "string1" = "string2" && echo "да" || ехо "не"

(показва "не" на екрана, защото "string1" не е равен на "string2")

тест "string1"! = "string2" && echo "да" || ехо "не"

(показва "да" на екрана, защото "string1" не е равен на "string2")

test -n "string1" && echo "да" || ехо "не"

(показва "да" на екрана, защото "string1" има дължина на низ, по-голяма от нула)

тест -z "string1" && echo "да" || ехо "не"

(показва "не" на екрана, защото "string1" има дължина на низове по-голяма от нула)

Сравняване на файлове

Ако сравнявате файлове, можете да използвате следните оператори за сравнение:

Примери:

тест / път / към / файл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 не съществува"

резюме

Тестовата команда е по-полезна в скриптовете, защото можете да тествате стойността на една променлива спрямо друга и да управлявате потока от програми. На стандартния команден ред можете да го използвате, за да проверите дали файлът съществува или