Introduction to Bash Scripting 07 - Checking the Existence of Files and Folders
Inhoudsopgave:
- Controleer of het bestand bestaat
- Controleer of Directory bestaat
- Controleer of het bestand niet bestaat
- Controleer of er meerdere bestanden bestaan
- Operators voor bestandstests
- Conclusie
Vaak komt u bij het schrijven van Shell-scripts in een situatie terecht waarin u een actie moet uitvoeren op basis van het feit of een bestand bestaat of niet.
In Bash kunt u de testopdracht gebruiken om te controleren of een bestand bestaat en het type van het bestand te bepalen.
De testopdracht heeft een van de volgende syntaxisvormen:
Controleer of het bestand bestaat
Bij het controleren of een bestand bestaat, zijn de meest gebruikte BESTAND-operatoren
-e
en
-f
. De eerste zal controleren of er een bestand bestaat, ongeacht het type, terwijl de tweede alleen waar retourneert als het BESTAND een normaal bestand is (geen map of apparaat).
De meest leesbare optie bij het controleren of een bestand bestaat of niet, is het gebruik van de testopdracht in combinatie met de instructie if. Een van de onderstaande fragmenten controleert of het bestand
/etc/resolv.conf
bestaat:
FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE exist" fi
FILE=/etc/resolv.conf if; then echo "$FILE exist" fi
FILE=/etc/resolv.conf if]; then echo "$FILE exist" fi
Als u een andere actie wilt uitvoeren op basis van of het bestand bestaat of niet, gebruik dan de if / then-constructie:
FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi
Gebruik altijd dubbele aanhalingstekens om problemen te voorkomen bij het omgaan met bestanden die witruimte in hun naam bevatten.
U kunt ook de testopdracht gebruiken zonder de if-opdracht. De opdracht na de operator
&&
wordt alleen uitgevoerd als de exitstatus van de testopdracht waar is,
test -f /etc/resolv.conf && echo "$FILE exist"
&& echo "$FILE exist"
] && echo "$FILE exist"
&& { echo "$FILE exist"; cp "$FILE" /tmp/; }
Tegenover
&&
staat de verklaring na de
||
operator wordt alleen uitgevoerd als de exitstatus van de testopdracht
false
.
&& echo "$FILE exist" || echo "$FILE does not exist"
Controleer of Directory bestaat
Met de operatoren
-d
kunt u testen of een bestand een map is of niet.
Als u bijvoorbeeld wilt controleren of de map
/etc/docker
bestaat, gebruikt u:
FILE=/etc/docker if; then echo "$FILE is a directory" fi
&& echo "$FILE is a directory"
U kunt ook de dubbele haakjes gebruiken
, 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));
Controleer of het bestand niet bestaat
Net als veel andere talen, kan de testexpressie teniet worden gedaan met de
!
(uitroepteken) logisch niet operator:
FILE=/etc/docker if; then echo "$FILE does not exist" fi
Hetzelfde als hierboven:
&& echo "$FILE does not exist"
Controleer of er meerdere bestanden bestaan
In plaats van gecompliceerde geneste als / else constructs te gebruiken, kunt u
-a
(of
&&
met
; then echo "$FILE is a directory" fi
FILE=/etc/docker if; then echo "$FILE is a directory" fi
Gelijkwaardige varianten zonder de IF-instructie te gebruiken:
&& echo "both files exist"
Operators voor bestandstests
De testopdracht bevat de volgende BESTAND-operatoren waarmee u kunt testen op bepaalde soorten bestanden:
-
-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 map is.-e
FILE
- Waar als het BESTAND bestaat en een bestand is, ongeacht het type (knooppunt, map, socket, enz.).-f
FILE
- Waar als het BESTAND bestaat en een normaal bestand is (geen map of apparaat).-G
FILE
- Waar als het BESTAND 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 vlagset-groep-id (sgid) heeft.-k
FILE
- Waar als het BESTAND bestaat en een plakkerige bitvlag heeft ingesteld.-L
FILE
- 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 een pijp is.-r
FILE
- Waar als het BESTAND bestaat en leesbaar is.-S
FILE
- Waar als het BESTAND bestaat en socket is.-s
FILE
- Waar als het BESTAND bestaat en niet-nul is.-u
FILE
- Waar als de vlag bestaat en set-user-id (suid) is ingesteld.-w
FILE
- Waar als het BESTAND bestaat en beschrijfbaar is.-x
FILE
- Waar als het BESTAND bestaat en uitvoerbaar is.
Conclusie
In deze gids hebben we u laten zien hoe u kunt controleren of een bestand of map bestaat met Bash.
bash-terminalMaak een ISO uit een map (of brand een map naar een cd / dvd) met ...
Een ISO maken van een map (of een map op een CD / DVD branden) met Folder2ISO
Hoe te controleren of een string een substring in bash bevat
Een van de meest voorkomende bewerkingen bij het werken met tekenreeksen in Bash is om te bepalen of een tekenreeks een andere tekenreeks bevat. In dit artikel laten we je verschillende manieren zien om te controleren of een string een substring bevat.
Hoe te controleren of een bestand of map bestaat in python
Wanneer u Python-scripts schrijft, wilt u misschien een bepaalde actie alleen uitvoeren als er een bestand of map bestaat of niet. U wilt bijvoorbeeld gegevens in een configuratiebestand lezen of schrijven of het bestand alleen maken als het al niet bestaat.