Skip to main content

Hoe testomstandigheden te gebruiken binnen een basisscript

SCP-093 Red Sea Object | euclid | portal / extradimensional scp (Juni- 2026)

SCP-093 Red Sea Object | euclid | portal / extradimensional scp (Juni- 2026)
Anonim

De testopdracht kan op de Linux-opdrachtregel worden gebruikt om het ene element met het andere te vergelijken, maar het wordt vaker gebruikt in BASH-shellscripts als onderdeel van voorwaardelijke instructies die logica en programmastroom regelen.

Een eenvoudig voorbeeld

U kunt deze opdrachten gewoon proberen door een terminalvenster te openen.

test 1 -eq 2 && echo "yes" || echo "nee"

Het bovenstaande commando kan als volgt worden opgesplitst:

  • test - Dit betekent dat u op het punt staat een vergelijking uit te voeren
  • 1 - Het eerste element dat u gaat vergelijken
  • -eq - Hoe vergelijk je het? In dit geval test u of het ene getal gelijk is aan het andere.
  • 2 - Het element waarmee u het eerste element vergelijkt
  • && - Voer de volgende verklaring uit als het resultaat waar is
  • echo "ja" - De opdracht die moet worden uitgevoerd als de vergelijking true oplevert
  • || - Voer de volgende verklaring uit als het resultaat false is
  • echo "nee" - De opdracht die moet worden uitgevoerd als de vergelijking false oplevert

In wezen vergelijkt het commando 1 tot 2 en als ze overeenkomen, wordt de echo "ja" -instructie uitgevoerd die "ja" weergeeft en als ze niet overeenkomen, wordt de echo "nee" -instructie uitgevoerd die "nee" toont.

Nummers vergelijken

Als u elementen vergelijkt die als getallen worden geanalyseerd, kunt u de volgende vergelijkingsoperatoren gebruiken:

  • -eq - waarde 1 gelijk aan waarde 2
  • -ge - is waarde 1 groter of gelijk aan waarde 2
  • -gt - is waarde 1 groter dan waarde 2
  • -le - is waarde 1 kleiner dan of gelijk aan waarde 2
  • -lt - is waarde 1 minder dan waarde 2
  • -ne - doet waarde 1 niet gelijk aan waarde 2

Voorbeelden

test 1 -eq 2 && echo "yes" || echo "nee"

(geeft "nee" weer op het scherm omdat 1 niet gelijk is aan 2)

test 1 -ge 2 && echo "yes" || echo "nee"

(geeft "nee" weer op het scherm omdat 1 niet groter of gelijk is aan 2)

test 1 -gt 2 && echo "ja" || echo "nee"

(geeft "nee" weer op het scherm omdat 1 niet groter is dan 2)

test 1 -le 2 && echo "yes" || echo "nee"

(geeft "ja" weer op het scherm omdat 1 kleiner is dan of gelijk is aan 2)

test 1 -lt 2 && echo "yes" || echo "nee"

(geeft "ja" weer op het scherm omdat 1 kleiner is dan of gelijk is aan 2)

test 1 -ne 2 && echo "ja" || echo "nee"

(geeft "ja" weer op het scherm omdat 1 niet gelijk is aan 2)

Tekst vergelijken

Als u elementen vergelijkt die worden geanalyseerd als tekenreeksen, kunt u de volgende vergelijkingsoperatoren gebruiken:

  • = - komt reeks 1 overeen met reeks 2
  • ! = - is reeks 1 anders dan reeks 2
  • -n - is de reekslengte groter dan 0
  • -z - is de reekslengte 0

Voorbeelden

test "string1" = "string2" && echo "yes" || echo "nee"

(geeft "nee" weer op het scherm omdat "string1" niet gelijk is aan "string2")

test "string1"! = "string2" && echo "yes" || echo "nee"

(geeft "ja" weer op het scherm omdat "string1" niet gelijk is aan "string2")

test -n "string1" && echo "yes" || echo "nee"

(geeft "ja" weer op het scherm omdat "string1" een stringlengte groter dan nul heeft)

test -z "string1" && echo "yes" || echo "nee"

(geeft "nee" weer op het scherm omdat "string1" een stringlengte groter dan nul heeft)

Bestanden vergelijken

Als u bestanden vergelijkt, kunt u de volgende vergelijkingsoperatoren gebruiken:

  • -ef - Hebben de bestanden hetzelfde apparaat en inodenummers (zijn ze hetzelfde bestand)
  • -nt - Is het eerste bestand nieuwer dan het tweede bestand
  • -ot - Is het eerste bestand ouder dan het tweede bestand
  • -b - Het bestand bestaat en is blok speciaal
  • -c - Het bestand bestaat en is karakter speciaal
  • -d - Het bestand bestaat en is een map
  • -e - Het bestand bestaat
  • -f - Het bestand bestaat en is een normaal bestand
  • -g - Het bestand bestaat en heeft het opgegeven groepsnummer
  • -G - Het bestand bestaat en de eigenaar van de gebruikersgroep
  • -h - Het bestand bestaat en is een symbolische link
  • -k - Het bestand bestaat en heeft zijn kleverige bit ingesteld
  • -L - Hetzelfde als -h
  • -O - ​​Het bestand bestaat dat jij de eigenaar bent
  • -p - Het bestand bestaat en heeft de naam pipe
  • -r - Het bestand bestaat en is leesbaar
  • -s - Het bestand bestaat en heeft een grootte groter dan nul
  • -S - Het bestand bestaat en is een socket
  • -t - De bestandsbeschrijving wordt geopend op een terminal
  • -u - Het bestand bestaat en het set-user-id-bit is ingesteld
  • -w - Het bestand bestaat en is schrijfbaar
  • -x - Het bestand bestaat en is uitvoerbaar

Voorbeelden

test / path / to / file1 -nt / path / to / file2 && echo "yes"

(Als bestand1 nieuwer is dan bestand2, wordt het woord "ja" weergegeven)

test -e / path / to / file1 && echo "yes"

(als bestand1 bestaat, wordt het woord "ja" weergegeven)

test -O / path / to / file1 && echo "yes"

(als u bestand1 bezit, wordt het woord "ja" weergegeven ")

Terminologie

  • Speciaal blok - Het bestand is een blokapparaat, wat betekent dat gegevens in blokken van bytes worden gelezen. Dit zijn over het algemeen apparaatbestanden zoals harde schijven.
  • Character special - Het bestand wordt meteen behandeld wanneer je ernaar schrijft en is meestal een apparaat zoals een seriële poort

Vergelijk meerdere condities

Tot nu toe heeft alles het ene ding vergeleken met het andere, maar wat als je twee condities wilt vergelijken?

Als een dier bijvoorbeeld 4 poten heeft en "moo" is, is het waarschijnlijk een koe. Gewoon 4 poten controleren is geen garantie voor het hebben van een koe, maar het controleren van het geluid maakt het zeker.

Gebruik de volgende verklaring om beide condities tegelijk te testen:

test 4 -eq 4 -a "moo" = "moo" && echo "het is een koe" || echo "het is geen koe"

Het belangrijkste onderdeel hier is de -a die staat voor en .

Er is een betere en vaker gebruikte manier om dezelfde test uit te voeren en die is als volgt:

test 4 -eq 4 && test "moo" = "moo" && echo "het is een koe" || echo "het is geen koe"

Een andere test die u misschien wilt doen is twee statements vergelijken en als een van beide waar is, geeft u een string af. Als u bijvoorbeeld wilt controleren of een bestand met de naam "file1.txt" bestaat of dat er een bestand met de naam "file1.doc" bestaat, kunt u de volgende opdracht gebruiken:

test -e file1.txt -o -e file1.doc && echo "file1 exists" || echo "bestand1 bestaat niet"

Het belangrijkste onderdeel hier is de -o die voor staat of .

Er is een betere en vaker gebruikte manier om dezelfde test uit te voeren en die is als volgt:

test -e file1.txt || test -e file1.doc && echo "file1 exists" || echo "bestand1 bestaat niet"

Het test-sleutelwoord elimineren

U hoeft de woordtest niet echt te gebruiken om de vergelijking uit te voeren. Het enige dat u hoeft te doen, is de verklaring als volgt tussen vierkante haken plaatsen:

-e file1.txt && echo "file1 exists" || echo "bestand1 bestaat niet"

De en betekent in feite hetzelfde als een test.

Nu u dit weet, kunt u het vergelijken van meerdere voorwaarden als volgt verbeteren:

4-eq 4 && "moo" = "moo" && echo "it is a cow" || echo "het is geen koe"-e file1.txt || -e file1.doc && echo "file1 exists" || echo "bestand1 bestaat niet"

Samenvatting

De testopdracht is nuttiger in scripts omdat u de waarde van de ene variabele ten opzichte van de andere kunt testen en de stroom van het besturingsprogramma kunt controleren. Op de standaardopdrachtregel kunt u deze gebruiken om te testen of een bestand bestaat of niet.