Android

Hvordan sjekke om det finnes en fil eller katalog i bash

Shell Scripting Tutorial | Shell Scripting Crash Course | Linux Certification Training | Edureka

Shell Scripting Tutorial | Shell Scripting Crash Course | Linux Certification Training | Edureka

Innholdsfortegnelse:

Anonim

Mange ganger når du skriver Shell-manus, kan du komme deg i en situasjon der du trenger å utføre en handling basert på om en fil eksisterer eller ikke.

I Bash kan du bruke testkommandoen til å sjekke om det finnes en fil og bestemme filtypen.

Testkommandoen har et av følgende syntaksformer:

test EXPRESSION]

Sjekk om fil eksisterer

Når du sjekker om det finnes en fil, er de mest brukte FILE-operatørene -e og -f . Den første vil sjekke om det finnes en fil uavhengig av type, mens den andre vil returnere true bare hvis FILEN er en vanlig fil (ikke en katalog eller en enhet).

Det mest lesbare alternativet når du sjekker om en fil eksisterer eller ikke, er å bruke testkommandoen i kombinasjon med if-setningen. Noen av kodebitene nedenfor vil sjekke om filen /etc/resolv.conf eksisterer:

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

Hvis du vil utføre en annen handling basert på om filen eksisterer eller ikke bare bruker if / then-konstruksjonen:

FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi Bruk alltid doble anførselstegn for å unngå problemer når du arbeider med filer som inneholder et mellomrom i deres navn.

Du kan også bruke testkommandoen uten if-setningen. Kommandoen etter && operatøren vil bare bli utført hvis utgangsstatusen til testkommandoen er sann, test -f /etc/resolv.conf && echo "$FILE exist"

&& echo "$FILE exist"

] && echo "$FILE exist"

&& { echo "$FILE exist"; cp "$FILE" /tmp/; }

I motsetning til && , uttalelsen etter || operatøren vil bare bli utført hvis utgangsstatusen til testkommandoen er false .

&& echo "$FILE exist" || echo "$FILE does not exist"

Sjekk om katalogen eksisterer

Operatørene -d lar deg teste om en fil er en katalog eller ikke.

For eksempel for å sjekke om /etc/docker katalogen eksisterer du vil bruke:

FILE=/etc/docker if; then echo "$FILE is a directory" fi

&& echo "$FILE is a directory"

Du kan også bruke doble parenteser , 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));

Sjekk om fil ikke eksisterer

I likhet med mange andre språk, kan testuttrykket negeres med ! (utropstegn) logisk ikke operatør:

FILE=/etc/docker if; then echo "$FILE does not exist" fi

Samme som ovenfor:

&& echo "$FILE does not exist"

Sjekk om flere filer eksisterer

I stedet for å bruke kompliserte nestede hvis / else-konstruksjoner kan du bruke -a (eller && med ; then echo "$FILE is a directory" fi

FILE=/etc/docker if; then echo "$FILE is a directory" fi

Tilsvarende varianter uten å bruke IF-setningen:

&& echo "both files exist"

] && echo "both files exist"

Operatører av filtest

Testkommandoen inkluderer følgende FIL-operatører som lar deg teste for bestemte filtyper:

  • -b FILE - Sann hvis FILEN eksisterer og er en spesiell blokkeringsfil. -c FILE - Sannt hvis FILEN eksisterer og er en spesiell tegnfil. -d FILE - Sann hvis FILEN eksisterer og er en katalog. -e FILE - Sant om FILEN eksisterer og er en fil, uavhengig av type (node, katalog, socket, etc.). -f FILE - Sant om FILEN eksisterer og er en vanlig fil (ikke en katalog eller enhet). -G FILE - Sann hvis FILEN eksisterer og har samme gruppe som brukeren som kjører kommandoen. -h FILE - Sant om FILEN eksisterer og er en symbolsk kobling. -g FILE - Sann hvis FILEN eksisterer og har set-group-id (sgid) flaggsett. -k FILE - Sann hvis FILEN eksisterer og har et klebrig bitflaggssett. -L FILE - Sann hvis FILEN eksisterer og er en symbolsk kobling. -O FILE - Sann hvis FILEN eksisterer og eies av brukeren som kjører kommandoen. -p FILE - Sann hvis FILEN eksisterer og er et rør. -r FILE - Riktig hvis FILEN eksisterer og er lesbar. -S FILE - Sann hvis FILEN eksisterer og er stikkontakt. -s FILE - Sannt hvis FILEN eksisterer og har ikke-størrelse størrelse. -u FILE - Sann hvis det eksisterende flagget som er angitt og sett-bruker-id (suid) er satt. -w FILE - Sann hvis FILEN eksisterer og kan skrives. -x FILE - Sann hvis FILEN eksisterer og er kjørbar.

Konklusjon

I denne guiden har vi vist deg hvordan du kan sjekke om det finnes en fil eller katalog ved hjelp av Bash.

bash terminal