logo

Bash sjekk om filen eksisterer

Mesteparten av tiden kan vi finne en situasjon der vi kanskje må utføre en handling som vil sjekke om en fil eksisterer eller ikke.

I Bash kan vi bruke en 'testkommando' for å sjekke om en fil eksisterer og bestemme hvilken type fil.

Følgende er syntaksene til testkommandoen, og vi kan bruke hvilken som helst av disse kommandoene:

 test expression [ expression ] [[ expression ]] 

Vi er pålagt å bruke en enkelt brakett '['-kommando for å gjøre skriptet vårt bærbart for alle POSIX-skall. Den oppgraderte versjonen av testkommandoen inneholder doble parenteser '[[' som støttes på de fleste moderne systemer som bruker Bash, Zsh og Ksh som standardskall.

Sjekk om filen eksisterer

Mens du sjekker om en fil eksisterer, er de mest brukte filoperatørene -e og -f. Alternativet '-e' brukes til å sjekke om en fil eksisterer uavhengig av type, mens alternativet '-f' brukes til å returnere sann verdi bare hvis filen er en vanlig fil (ikke en katalog eller en enhet).

Det vanligste alternativet for å sjekke om filen eksisterer eller ikke er å bruke testkommandoen med 'if conditional statement'.

Følgende er eksemplene for å sjekke 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 

Produksjon

Utdata for alle de tre metodene vil være som nedenfor fordi vi har en fil (read_file.txt) i katalogen:

postordre traversering av binært tre
 read_file.txt exist 

Hvis vi ønsker å utføre en handling som vil gi et resultat basert på om filen eksisterer eller ikke, kan vi bruke if/then-konstruksjonen på følgende måte:

Eksempel

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

Produksjon

 read_file.txt exist 

Vi kan også bruke testkommandoen uten if-setningen. Vi kan bruke hvilken som helst av 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' 

Produksjon

Utdata for alle de tre metodene vil være som nedenfor fordi vi har en fil (read_file.txt) i katalogen:

 read_file.txt exist 

Hvis det er flere kommandoer som skal kjøres etter &&-operatoren, må du omslutte kommandoene i krøllede parenteser atskilt med semikolon(;) eller AND (&&), dvs.:

Eksempel

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

I motsetning til &&, setningen etter || operatør utføres bare hvis utgangsstatusen til testkommandoen er 'false'.

Eksempel

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

Produksjon

 read_file.txt exist 

Dette er de mest brukte metodene i Bash for å sjekke om filen eksisterer eller ikke.

Sjekk om katalogen eksisterer

Operatoren '-d' lar oss teste om en fil er en katalog eller ikke.

Følgende er metodene for å sjekke om 'Javatpoint'-katalogen 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' 

Merk:Vi kan også bruke doble parenteser '[[' i stedet for en enkelt parentes '['.

Produksjon

innsettingssortering

Utdata for begge metodene ovenfor vil være som nedenfor da vi har en katalog (kalt Javatpoint) til stede på den angitte plasseringen:

 Javatpoint is a directory 

Sjekk OM filen ikke eksisterer

Testuttrykket kan negeres ved å bruke utropstegnet (! -logical NOT-operator). Sjekk ut følgende eksempel:

Eksempel

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

Manuset ovenfor kan også skrives som nedenfor:

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

Produksjon

 missing_read_file.txt unavailable 

Filtestoperatører

Testkommandoene inkluderer følgende filoperatører som lar oss teste for bestemte typer filer:

-b Fil returnerer 'True' hvis FILEN eksisterer som en blokk spesialfil.
-c Fil returnerer 'True' hvis FILEN eksisterer som en spesialtegnfil.
-d fil returnerer 'True' hvis FILEN eksisterer som en katalog.
-e File Returns 'True' hvis FILEN eksisterer som en fil, uavhengig av type (node, katalog, socket, etc.).
-f File Returns 'True' hvis FILEN eksisterer som en vanlig fil (ikke en katalog eller enhet).
-G-fil returnerer 'True' hvis FILEN eksisterer og inneholder samme gruppe som brukeren kjører kommandoen.
-h Fil returnerer 'True' hvis FILEN eksisterer som en symbolsk lenke.
-g File Returns 'True' hvis FILEN eksisterer og inneholder set-group-id (sgid) flaggsett.
-k Fil Returnerer 'True' hvis FILEN eksisterer og inneholder et sticky bit-flaggsett.
-L File Returns 'True' hvis FILEN eksisterer som en symbolsk lenke.
-O File Returns 'True' hvis FILEN eksisterer og eies av brukeren som kjører kommandoen.
-p File Returns 'True' hvis FILEN eksisterer som en pipe.
-r Fil Returnerer 'True' hvis FILEN eksisterer som en lesbar fil.
-S File Returns 'True' hvis FILEN eksisterer som en socket.
-s File Returns 'True' hvis FILEN eksisterer og har en størrelse som ikke er null.
-u File Returns 'True' hvis FILEN eksisterer, og set-user-id (suid)-flagget er satt.
-w File Returns 'True' hvis FILEN eksisterer som en skrivbar fil.
-x fil returnerer 'True' hvis FILEN eksisterer som en kjørbar fil.