Android

Hur man kontrollerar om en fil eller katalog finns i bash

How To Use LMMS - Tutorial For Beginners (FREE DAW)

How To Use LMMS - Tutorial For Beginners (FREE DAW)

Innehållsförteckning:

Anonim

Många gånger när du skriver Shell-skript kan du befinna dig i en situation där du behöver utföra en åtgärd baserad på om en fil finns eller inte.

I Bash kan du använda testkommandot för att kontrollera om en fil finns och bestämma filtypen.

Testkommandot har en av följande syntaxformer:

test EXPRESSION]

Kontrollera om fil finns

När du kontrollerar om en fil finns är de mest använda FIL-operatörerna -e och -f . Den första kommer att kontrollera om en fil finns oavsett typ, medan den andra kommer att returnera true endast om FILEN är en vanlig fil (inte en katalog eller en enhet).

Det mest läsbara alternativet när du kontrollerar om en fil finns eller inte är att använda testkommandot i kombination med if-uttalandet. Någon av utdragen nedan kommer att kontrollera om filen /etc/resolv.conf finns:

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

Om du vill utföra en annan åtgärd baserad på om filen finns eller inte använder du if / sedan-konstruktionen:

FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi Använd alltid dubbla citat för att undvika problem när du hanterar filer som innehåller blanksteg i deras namn.

Du kan också använda testkommandot utan if-uttalandet. Kommandot efter && operatören kommer endast att köras om testkommandoens utgångsstatus är sant, test -f /etc/resolv.conf && echo "$FILE exist"

&& echo "$FILE exist"

] && echo "$FILE exist"

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

Motsatt till && , uttalandet efter || operatören kommer endast att köras om testkommandoens utgångsstatus är false .

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

Kontrollera om katalogen finns

Operatörerna -d låter dig testa om en fil är en katalog eller inte.

Till exempel för att kontrollera om /etc/docker finns som du skulle använda:

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

&& echo "$FILE is a directory"

Du kan också använda dubbla parenteser , 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));

Kontrollera om filen inte finns

Liksom många andra språk kan testuttrycket negeras med hjälp av ! (utropstecken) logiskt inte operatör:

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

Samma som ovan:

&& echo "$FILE does not exist"

Kontrollera om flera filer finns

Istället för att använda komplicerade kapslade om / annars konstruerar kan du använda -a (eller && med ; then echo "$FILE is a directory" fi

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

Motsvarande varianter utan att använda IF-uttalandet:

&& echo "both files exist"

] && echo "both files exist"

Filtestoperatörer

Testkommandot innehåller följande FIL-operatörer som låter dig testa för vissa filtyper:

  • -b FILE - Sant om FILEN finns och är en block-specialfil. -c FILE - Sant om FILEN finns och är en specialteckenfil. -d FILE - Sant om FILEN finns och är en katalog. -e FILE - Sant om FILEN finns och är en fil, oavsett typ (nod, katalog, socket, etc.). -f FILE - Sant om FILEN finns och är en vanlig fil (inte en katalog eller enhet). -G FILE - Sant om FILEN finns och har samma grupp som användaren som kör kommandot. -h FILE - Sant om FILEN finns och är en symbolisk länk. -g FILE - Sant om FILEN finns och har set-group-id (sgid) flagguppsättning. -k FILE - Sant om FILEN finns och har en klibbig bitflagguppsättning. -L FILE - Sant om FILEN finns och är en symbolisk länk. -O FILE - Sant om FILEN finns och ägs av användaren som kör kommandot. -p FILE - Sant om FILEN finns och är ett rör. -r FILE - Sant om FILEN finns och är läsbar. -S FILE - Sant om FILEN finns och är uttaget. -s FILE - Sant om FILEN finns och har storleksanpassning. -u FILE - Sant om den existerande och set-user-id (suid) flaggan är inställd. -w FILE - Sant om FILEN finns och är skrivbar. -x FILE - Sant om FILEN finns och är körbar.

Slutsats

I den här guiden har vi visat dig hur du kan kontrollera om en fil eller katalog finns med Bash.

bash terminal