Skip to main content

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

Section 9 (Април 2025)

Section 9 (Април 2025)
Anonim

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

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

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

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

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

  • тест - Това означава, че ще извършите сравнение
  • 1 - Първият елемент, който ще сравнявате
  • -ек - Как сравнявате. В този случай тествате дали едно число е равно на друго.
  • 2 - елементът, с който сравнявате първия елемент срещу
  • && - Изпълнете следното изречение, ако резултатът е вярно
  • echo "yes" - командата за изпълнение, ако сравнението се върне вярно
  • || - Изпълнете следното изречение, ако резултатът е невярно
  • echo "no" - Командата да се изпълнява, ако сравнението върне невярно

По същество командата сравнява 1 до 2 и ако те съвпадат, екранът "yes" се изпълнява, който показва "да" и ако те не съвпадат, се изпълнява екран "no", който показва "не".

Сравняване на числата

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

  • -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 - Файлът съществува и е изпълним

Примери

test / път / към / файл1 -nt / път / към / файл2 && ехо "да"

(Ако файлът1 е по-нов от файла2, тогава ще се появи думата "да")

test -e / path / to / file1 & & echo "да"

(ако file1 съществува думата "да" ще се покаже)

тест -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 не съществува"

резюме

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