logo

Bash check om filen eksisterer

Det meste af tiden kan vi finde en situation, hvor vi muligvis skal udføre en handling, der vil kontrollere, om en fil eksisterer eller ej.

I Bash kan vi bruge en 'testkommando' til at kontrollere, om en fil eksisterer, og bestemme typen af ​​en fil.

Følgende er syntakserne for testkommandoen, og vi kan bruge enhver af disse kommandoer:

 test expression [ expression ] [[ expression ]] 

Vi er forpligtet til at bruge en enkelt parentes '['-kommando for at gøre vores script bærbart til alle POSIX-skaller. Den opgraderede version af testkommandoen indeholder dobbelte parenteser '[[', som understøttes på de fleste moderne systemer, der bruger Bash, Zsh og Ksh som standardskal.

Tjek om filen findes

Mens du tjekker om en fil eksisterer, er de mest almindeligt anvendte filoperatører -e og -f. '-e'-indstillingen bruges til at kontrollere, om en fil eksisterer uanset typen, mens '-f'-indstillingen kun bruges til at returnere sand værdi, hvis filen er en almindelig fil (ikke en mappe eller en enhed).

Den mest almindelige mulighed for at kontrollere, om filen eksisterer eller ej, er at bruge testkommandoen med 'if conditional statement'.

Følgende er eksempler for at kontrollere, om filen 'read_file.txt' eksisterer:

Metode 1

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

Metode 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

Metode 3

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

Produktion

Output for alle de tre metoder vil være som nedenfor, fordi vi har en fil (read_file.txt) til stede i mappen:

postorder traversering af binært træ
 read_file.txt exist 

Hvis vi ønsker at udføre en handling, som vil give et resultat baseret på om filen eksisterer eller ej, kan vi bruge if/then-konstruktionen på følgende måde:

Eksempel

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

Produktion

 read_file.txt exist 

Vi kan også bruge testkommandoen uden if-sætningen. Vi kan bruge en af ​​følgende metoder:

Metode 1

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

Metode 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

Metode 3

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

Produktion

Output for alle de tre metoder vil være som nedenfor, fordi vi har en fil (read_file.txt) til stede i mappen:

 read_file.txt exist 

Hvis der er flere kommandoer, der skal køres efter &&-operatoren, skal du omslutte kommandoerne i krøllede parenteser adskilt af semikolon(;) eller OG (&&), dvs.:

Eksempel

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

I modsætning til && er sætningen efter || operatør udføres kun, hvis udgangsstatus for testkommandoen er 'falsk'.

Eksempel

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

Produktion

 read_file.txt exist 

Dette er de almindeligt anvendte metoder i Bash til at kontrollere, om filen eksisterer eller ej.

Tjek, om mappen findes

Operatøren '-d' giver os mulighed for at teste, om en fil er en mappe eller ej.

Følgende er metoderne til at kontrollere, om 'Javatpoint'-biblioteket eksisterer:

Metode 1

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

Metode 2

 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

Bemærk:Vi kan også bruge dobbelt parentes '[[' i stedet for en enkelt parentes '['.

Produktion

indsættelsessortering

Output for begge ovenstående metoder vil være som nedenfor, da vi har en mappe (navngivet Javatpoint) til stede på den angivne placering:

 Javatpoint is a directory 

Tjek, HVIS filen ikke eksisterer

Testudtrykket kan negeres ved at bruge udråbstegn (! -logical NOT operator). Tjek følgende eksempel:

Eksempel

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

Ovenstående script kan også skrives som nedenfor:

 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

Produktion

 missing_read_file.txt unavailable 

Fil test operatører

Testkommandoerne inkluderer følgende filoperatører, som giver os mulighed for at teste for bestemte typer filer:

-b Fil returnerer 'True', hvis FILEN eksisterer som en speciel blokfil.
-c Fil returnerer 'True', hvis FILEN eksisterer som en fil med specialtegn.
-d Fil returnerer 'True' hvis FILEN eksisterer som en mappe.
-e Fil vender tilbage 'True' hvis FILEN eksisterer som en fil, uanset type (node, mappe, socket osv.).
-f Fil vender tilbage 'True', hvis FILEN eksisterer som en almindelig fil (ikke en mappe eller enhed).
-G Fil vender tilbage 'True', hvis FILEN findes og indeholder den samme gruppe, som brugeren kører kommandoen.
-h Fil vender tilbage 'True', hvis FILEN eksisterer som et symbolsk link.
-g Fil returnerer 'True' hvis FILEN findes og indeholder set-group-id (sgid) flagsæt.
-k Fil Returnerer 'True', hvis FILEN eksisterer og indeholder et sticky bit-flagsæt.
-L Fil vender tilbage 'True', hvis FILEN eksisterer som et symbolsk link.
-O Fil vender tilbage 'True', hvis FILEN eksisterer og ejes af den bruger, der kører kommandoen.
-p Fil vender tilbage 'True', hvis FILEN eksisterer som en pipe.
-r Fil vender tilbage 'True', hvis FILEN eksisterer som en læsbar fil.
-S Fil vender tilbage 'True' hvis FILEN eksisterer som en socket.
-s Fil returnerer 'True', hvis FILEN eksisterer og har en størrelse, der ikke er nul.
-u Fil returnerer 'True' hvis FILEN eksisterer, og set-user-id (suid) flag er sat.
-w Fil returnerer 'True', hvis FILEN eksisterer som en skrivbar fil.
-x Fil vender tilbage 'True', hvis FILEN eksisterer som en eksekverbar fil.