Meestal vinden we een situatie waarin we mogelijk een actie moeten uitvoeren om te controleren of een bestand bestaat of niet.
In Bash kunnen we een “testopdracht” gebruiken om te controleren of een bestand bestaat en het type bestand te bepalen.
Hieronder volgen de syntaxis van de testopdracht, en we kan elk van deze commando’s gebruiken:
We zijn verplicht om een enkel haakje “[” commando te gebruiken om ons script draagbaar te maken voor alle POSIX-shells. De bijgewerkte versie van het testcommando bevat dubbele haakjes “[[” die wordt ondersteund op de meeste moderne systemen die Bash, Zsh en Ksh als standaard shell gebruiken.
Controleer of bestand bestaat
Terwijl u controleert of een bestand bestaat, zijn de meest gebruikte bestandsoperatoren -e en -f. De “-e” -optie wordt gebruikt om te controleren of een bestand bestaat, ongeacht het type, terwijl de “-f” -optie wordt gebruikt om alleen de werkelijke waarde te retourneren als het bestand een gewoon bestand is (geen directory of apparaat). / p>
De meest gebruikelijke optie om te controleren of het bestand bestaat of niet is om het testcommando te gebruiken met de “if conditionele instructie”.
Hieronder volgen de voorbeelden om te controleren of het “read_file. txt “-bestand bestaat:
Methode 1
Methode 2
Methode 3
Uitvoer
Uitvoer voor alle drie de methoden zal zijn zoals hieronder, omdat we een bestand (read_file.txt) in de directory hebben:
read_file.txt exist
Als we een actie willen uitvoeren die een resultaat oplevert op basis van of het bestand al dan niet bestaat, kunnen we de if / then-constructie gebruiken in de volgende manier:
Voorbeeld
Uitvoer
read_file.txt exist
We kunnen de opdracht test ook gebruiken zonder de instructie if. We kunnen een van de volgende methoden gebruiken:
Methode 1
Methode 2
Methode 3
Uitvoer
Uitvoer voor alle drie de methoden zal zijn zoals hieronder, omdat we een bestand (read_file.txt) in de directory hebben:
read_file.txt exist
Voorbeeld
In tegenstelling tot & &, de instructie na de || operator wordt alleen uitgevoerd als de afsluitstatus van het testcommando “false” is.
Voorbeeld
Uitvoer
read_file.txt exist
Dit zijn de veelgebruikte methoden in Bash om te controleren of het bestand bestaat of niet.
Controleer of de directory bestaat
Met de operator “-d” kunnen we testen of een bestand een map is of niet.
Hieronder volgen de methoden om te controleren of de map “Javatpoint” bestaat:
Methode 1
Methode 2
Opmerking: we kunnen ook dubbele haakjes “[[” gebruiken in plaats van een enkele haak “[” .
Uitvoer
Uitvoer voor beide bovenstaande methoden zal zijn zoals hieronder, aangezien we een map (genaamd Javatpoint) aanwezig hebben op de opgegeven locatie:
Javatpoint is a directory
Controleer of bestand niet bestaat
De testuitdrukking kan worden genegeerd door het uitroepteken te gebruiken (! -logische NOT-operator). Bekijk het volgende voorbeeld:
Voorbeeld
Bovenstaand script kan ook worden geschreven zoals hieronder:
Uitvoer
missing_read_file.txt unavailable
Bestandstestoperatoren
De testopdrachten bevatten de volgende bestandsoperatoren die ons in staat stellen test voor bepaalde bestandstypen:
-b FileReturns | “True” als het BESTAND bestaat als een blokspecial bestand. |
-c FileReturns | “True” als het FILE bestaat als een speciaal tekenbestand. |
-d FileReturns | “True” als het FILE bestaat als een directory. |
-e FileReturns | “True “als het BESTAND bestaat als een bestand, ongeacht het type (knooppunt, directory, socket, enz.). |
-f FileReturns | ” True ” als het BESTAND bestaat als een normaal bestand (geen directory of apparaat). |
-G FileReturns | “True” als het BESTAND bestaat en de dezelfde groep als de gebruiker voert de comm en. |
-h FileReturns | “True” als het FILE bestaat als een symbolische link. |
-g FileReturns | “True” als het FILE bestaat en set-group-id (sgid) vlagset bevat. |
-k FileReturns | “True” als het FILE bestaat en een sticky bit flag set bevat. |
-L FileReturns | “True” als de FILE bestaat als een symbolische link. |
-O FileReturns | “True” als het FILE bestaat en eigendom is van de gebruiker die het commando uitvoert. |
-p FileReturns | “True” als het FILE bestaat als een pipe. |
– r FileReturns | “True” als het FILE bestaat als een leesbaar bestand. |
-S FileReturns | “True” als de FILE bestaat als een socket. |
-s FileReturns | “True” als het BESTAND bestaat en niet nul heeft. |
-u FileReturns | “Waar” als het FILE bestaat, en de set-user-id (suid) vlag is ingesteld. |
-w FileReturns | “True” als het BESTAND bestaat als een beschrijfbaar bestand. |
-x FileReturns | “True” als het BESTAND bestaat als een uitvoerbaar bestand. |