Bij het schrijven van Shell-scripts kunt u vaak in een situatie terechtkomen waarin u een actie moet uitvoeren op basis van het feit of een bestand al dan niet bestaat .
In Bash kunt u het testcommando gebruiken om te controleren of een bestand bestaat en het type bestand te bepalen.
Het testcommando heeft een van de volgende syntaxisvormen:
Als u wilt dat uw script draagbaar is, kunt u beter de oude test ; then echo "$FILE exists."fi
Als u een andere actie wilt uitvoeren op basis van of het bestand al dan niet bestaat, gebruik de if / then-constructie:
Je kunt ook het test commando gebruiken zonder het if statement. Het commando na de &&
operator zal alleen worden uitgevoerd als de exit-status van het testcommando waar is,
Als je wilt voer een reeks opdrachten uit na de &&
-operator, plaats de opdrachten gewoon tussen accolades, gescheiden door ;
of &&
:
In tegenstelling tot &&
, de instructie na de ||
operator wordt alleen uitgevoerd als de afsluitstatus van het testcommando false
is.
Controleer of directory bestaat #
Met de operatoren -d
kunt u testen of een bestand een directory of niet.
Om bijvoorbeeld te controleren of de /etc/docker
directory bestaat, gebruikt u:
Je kunt ook de dubbele haakjes gebruiken ; then echo "$FILE does not exist."fi
Hetzelfde als hierboven:
Controleer of er meerdere bestanden bestaan #
In plaats van ingewikkelde geneste if / else-constructies te gebruiken, kun je -a
(of &&
met ; then echo "Both files exist."fi
Equivalente varianten zonder de IF-instructie te gebruiken:
File test operators #
Het test-commando bevat de volgende FILE-operators waarmee je op bepaalde bestandstypen kunt testen:
-
-b
FILE
– Waar als het BESTAND bestaat en een speciaal blokbestand is. -
-c
FILE
– Waar als het BESTAND bestaat en een speciaal tekenbestand is. -
-d
FILE
– Waar als het BESTAND bestaat en een directory is. -
-e
FILE
– Waar als het FILE bestaat en een bestand is, ongeacht het type (knooppunt, directory, socket, etc.). -
-f
FILE
– Waar als het BESTAND bestaat en een normaal bestand is (geen directory of apparaat). -
-G
FILE
– Waar als het FILE bestaat en dezelfde groep heeft als de gebruiker die de opdracht uitvoert. -
-h
FILE
– Waar als het BESTAND bestaat en een symbolische link is. -
-g
FILE
– Waar als het BESTAND bestaat en de vlag set-group-id (sgid
) is ingesteld. -
-k
FILE
– Waar als het BESTAND bestaat en een sticky bit-vlag is ingesteld. -
-L
– Waar als het BESTAND bestaat en een symbolische link is. -
-O
FILE
– Waar als het BESTAND bestaat en eigendom is van de gebruiker die de opdracht uitvoert. -
-p
FILE
– Waar als het BESTAND bestaat en is een pipe. -
-r
FILE
– Waar als het BESTAND bestaat en leesbaar is. -
-S
FILE
– Waar als het BESTAND bestaat en een socket is. -
-s
FILE
– Waar als het BESTAND bestaat en de grootte niet nul heeft. -
-u
FILE
– Waar als het BESTAND bestaat en de vlag set-user-id (suid
) is ingesteld. -
-w
FILE
– Waar als het BESTAND bestaat en schrijfbaar is. -
-x
FILE
– Waar als het FILE bestaat en exe is snijdbaar.
Conclusie #
In deze gids hebben we je laten zien hoe je kunt controleren of er een bestand of map bestaat in Bash.