Creative Saplings

Hur man korrekt kontrollerar om filen finns i Bash eller Shell (med exempel)

februari 13, 2021
No Comments

Innehållsförteckning

I denna handledning kommer jag att täcka olika attribut som du kan använda i bash- eller shell-skript för att kontrollera mot filer och kataloger. Du kan använda bash villkorliga uttryck med ] eller använda test med för att kontrollera om filen finns.

Vi kommer använder bash if and else-operatören för alla exempel så jag skulle rekommendera dig att läsa: Bash if else användarhandbok för absoluta nybörjare

1. Bash / Shell: Kontrollera om filen finns och är en vanlig fil

Detta avsnitt visar exemplen för att kontrollera om den vanliga filen finns i bash.

1.1: Metod-1: Använda enkla eller dubbla parenteser

Använda dubbla parenteser ]

#!/bin/bashFILE="/etc/passwd"if ];then echo "$FILE exists"else echo "$FILE doesn"t exist"fi

Använda enstaka parentes

#!/bin/bashFILE="/etc/passwd"if ;then echo "$FILE exists"else echo "$FILE doesn"t exist"fi

1.2: Metod-2: Använd testkommando

test -kommandot används för att kontrollera filtyper och jämföra värden.

#!/bin/bashFILE="/etc/passwd"if test -f $FILE; then echo "$FILE exists"else echo "$FILE missing"fi

1.3: Metod-3: Enstaka rad

Vi kan använda enstaka eller dubbla parenteser här i det här exemplet. Jag rekommenderar att du alltid använder dubbla parenteser när du skriver en linjekod i skal eftersom det minimerar risken för att få varningar på konsolen när orduppdelning sker.

#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists" || echo "$FILE missing"

Uttalandet efter && kommer att köras om SUCCESS. Om det första villkoret returnerar FALSE kommer uttalande med || att köras.

På samma sätt använder du testkommandot för att kontrollera om vanlig fil finns i bash eller shell-skript i en rad .

#!/bin/bashFILE="/etc/passwd"test -f $FILE && echo "$FILE exists" || echo "$FILE missing"

2. Bash / Shell: Kontrollera om filen finns (är tom eller inte tom)

Kontrollera om filen finns och om den är tom eller om den har något innehåll använder vi ”-s” attribut

2.1: Metod-1: Använda enkla eller dubbla parenteser

Kontrollera om filen finns och är tom eller inte tom med dubbla parenteser ]

#!/bin/bashFILE="/etc/passwd"if ]; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi

Kontrollera om filen finns och är tom eller inte tom med dubbla parenteser

if ; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi

2.2: Metod-2: Använd testkommando

Med testkommando kombinerar vi -s attribut för att kontrollera om filen finns och är tom eller har något innehåll:

2.3: Metod-3: Enstaka rad

Vi kan använda både dubbla eller enkla parenteser för en sådan liner men som jag sa tidigare skulle jag rekommendera att du använder dubbla parenteser.

#!/bin/bashFILE="/etc/passwd"test -s $FILE && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"

På samma sätt som testkommando kan vi använda && och || operatör för att kontrollera filen i enradskommando i vårt skalskript.

#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"

3. Bash / Shell: Kontrollera om katalogen finns

Jag hoppas att du vet att i Linux är allt en fil. Så på det sättet anses en katalog också vara en fil. Vi kan använda attributet -d ”för att kontrollera om en katalog finns i skalprogrammering.

3.1: Metod-1: Använda dubbla eller enkla parenteser

Vi kan använda -d attribut inom enstaka eller dubbla parenteser ] om katalog finns.

#!/bin/bashDIR="/var/log"if ]; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

På samma sätt använder vi enstaka parenteser i detta exempel för att kontrollera om katalogen är förinställd i skalskriptet.

#!/bin/bashDIR="/var/log"if ; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

3.2: Metod-2: Använda testkommando

I det här exemplet använder vi testkommando för att se till om katalogen finns eller inte innan vi utför en viss uppgift.

#!/bin/bashDIR="/var/log"if test -d $DIR; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

3.3: Metod-3: Enstaka rad

I det här exemplet använder vi enstaka och dubbla parenteser i enradig form för att kontrollera för katalogen. Uttrycket efter && operatör kommer att köras om det första villkoret är SANT och om det är FALSK kommer || villkorets uttalande att köras .

#!/bin/bashDIR="/var/log"] && echo "$DIR exists" || echo "$DIR doesn"t exist"

Jag rekommenderar att du använder ] istället för för sådana linjekoder i skalprogrammering.

På samma sätt med && och || kan vi använda testkommandot för att kontrollera om katalog finns

#!/bin/bashDIR="/var/log"test -d $DIR && echo "$DIR exists" || echo "$DIR doesn"t exist"

4. Bash / Shell: Kontrollera om katalog finns (tom eller inte tom)

Det finns inga skalattribut som jag har använt i alla andra exempel och scenarier i den här självstudien, men vi har några hack som vi kan använda för att kontrollera om katalogen är tom eller inte tom.

4.1: Metod-1: Lista kataloginnehållet och verifiera

I det här exemplet listar vi innehållet i katalogen, undertrycker utdata och kontrollerar sedan utgångskoden om katalogen är tom eller innehåller en del innehåll

#!/bin/bashDIR="/tmp"if ls -1qA $DIR | grep -q . ; then echo "$DIR is not -empty"else echo "$DIR is empty"fi

Vi kan också vända detta genom att sätta ett NOT (!) villkor. Så det skulle se ut som:

#!/bin/bashDIR="/tmp"if ! ls -1qA $DIR | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

Utdata skulle vara densamma i båda exemplen på manus.

4.2: Metod-2: Användning hitta kommando

Vi kan använda find kommando och sedan undertrycka utdata för att kontrollera om målkatalogen har något innehåll eller inte.

#!/bin/bashDIR="/tmp"if find -- "$DIR" -prune -type d -empty | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

4.3: Metod-3: Lista innehållet

Återigen som jag sa eftersom det inte finns något enkelt sätt att kontrollera om en katalog är tom eller inte använder vissa attribut, kommer vi att lista innehållet i katalogen. Om du inte får utdata är katalogen tom eller annars tom

#!/bin/bashDIR="/tmp"if ] ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

5. Bash / Shell: Lista över attribut till testfil

På samma sätt finns det många fler attribut som du kan använda med skalskript för att söka efter olika filtyper, till exempel symboliska länkar, filbehörigheter etc.

Attribut Vad gör det?
-a FILE Sant om FILE finns
-b FILE Sant om FILE existerar och är en blockfil.
-c FILE Sant om FILE finns och är en karaktärspecifik fil.
-d FILE Sant om FILE finns och är en katalog.
Sant om FILE existerar
-f FILE Det är sant om FILE finns och är en vanlig fil
-g FILE Sant om FILE finns och dess set-group-id-bit är inställd
-h FILE Sant om FILE finns och är en symbolisk länk
-k FILE Sant om FILE finns och dess ”klibbiga” bit är inställd
-p FILE Sant om FILE finns och är en namngiven rör (FIFO)
-r FILE Sant om FILE finns och är läsbar
-s FILE Sant om FILE finns och har en storlek större än noll
-u FILE Sant om FILE existerar och dess set-user-id-bit är inställd
-w FILE Sant om FILE finns och är skrivbar
-x FILE Sant om FILE finns och kan köras
-G FILE Sant om FILE finns och ägs av det effektiva grupp-id
-L FILE Sant om FILE finns och är en symbolisk länk
-N FILE Sant om FILE finns och har ändrats sedan den senast lästes
-o FILE Sant om FILE finns och ägs av den effektiva användar-id
-S FILE Sant om FILE finns och är ett uttag
Sant om FILE1 och FILE2 hänvisar till samma enhet och inodnummer
FILE1 -nt FILE2 Sant om FILE1 är nyare (enligt modifieringsdatum) än FILE2, eller om FILE1 finns och FILE2 inte
FILE1 -ot FILE2 Sant om FILE1 är äldre än FILE2, eller om FILE2 finns och FILE1 inte

Slutsats

Articles
Previous Post

Hur man säger att du är välkommen på franska

Next Post

Så här konfigurerar du fjärråtkomst och ansluter till en fjärr SQL Server-instans med ApexSQL-verktyg

Lämna ett svar Avbryt svar

Senaste inläggen

  • Världens bästa fotoskolor, 2020
  • Suveräna medborgare tar sin regeringsfilosofi mot vägarna
  • Guide för reparation av stuckaturer
  • Muckrakers (Svenska)
  • Precision Oncology (Svenska)

Arkiv

  • februari 2021
  • januari 2021
  • december 2020
  • november 2020
  • oktober 2020
  • september 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.