Hur man kontrollerar om en fil eller katalog finns i Bash

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 baserat på om en fil finns eller inte .

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

Testkommandot har en av följande syntaxformer:

Om du vill att ditt skript ska vara bärbart bör du föredra att använda det gamla testet ; then echo "$FILE exists."fi

Om du vill utföra en annan åtgärd baserat på om filen existerar eller inte använd if / then-konstruktionen:

Använd alltid dubbla citat för att undvika problem när du hanterar filer innehåller mellanslag i deras namn.

Du kan också använda testkommandot utan if-satsen. Kommandot efter && -operatorn kommer endast att utföras om testkommandot utgångsstatus är sant,

Om du vill kör en serie kommandon efter operatorn && helt enkelt bifoga kommandona i lockiga parenteser åtskilda av ; eller &&:

Mittemot &&, uttalandet efter || -operatören kommer endast att köras om testkommandots utgångsstatus är false.

Kontrollera om katalogen finns #

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

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

Du kan också använda de dubbla parenteserna ; then echo "$FILE does not exist."fi

Samma som ovan:

Kontrollera om flera filer finns #

I stället för att använda komplicerade kapslade if / else-konstruktioner kan du använda -a (eller && med ; then echo "Both files exist."fi

Motsvarande varianter utan att använda IF-satsen:

Filtestoperatörer #

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

  • -b FILE – Sant om FILEN existerar och är en speciell blockfil.
  • -c FILE – True om FILEN finns och är en specialteckenfil.
  • -d FILE – Sant om FILEN finns och är en katalog.
  • -e FILE – Sant om FILEN existerar och är en fil, oavsett typ (nod, katalog, uttag 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 existerar och har en klibbig bituppsättning.
  • -L – Sant om FILEN existerar och är en symbolisk länk.
  • -O FILE – Sant om FILEN existerar och ägs av användaren som kör kommandot.
  • -p FILE – True if FILEN existerar och är ett rör.
  • -r FILE – Sant om FILEN existerar och är läsbar.
  • -S FILE – Sant om FILEN finns och är ett uttag.
  • -s FILE – Sant om FILEN existerar och har en nollstorlek.
  • -u FILE – Det är sant om FILEN finns och set-user-id (suid) flaggan är inställd.
  • -w FILE – Sant om FILEN existerar och är skrivbar.
  • -x FILE – Sant om FILEN existerar och exe skärbar.

Slutsats #

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *