Android

Hoe te controleren of een bestand of map bestaat in bash

Introduction to Bash Scripting 07 - Checking the Existence of Files and Folders

Introduction to Bash Scripting 07 - Checking the Existence of Files and Folders

Inhoudsopgave:

Anonim

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:

test EXPRESSION]

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"

] && 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-terminal