Hvordan sjekke om en fil eller katalog finnes i et Bash Shell-skript

Sjekker om en fil eller katalog eksisterer fra et Bash-skript

Bash brukes til å automatisere regelmessig utførte kommandoer i Linux. Kommandoer som er ment for operasjoner på filer/kataloger er ganske hyppig brukt, og vanligvis, før vi utfører en slik kommando, må vi sjekke om den aktuelle filen eller katalogen eksisterer. La oss se hvordan du utfører denne kontrollen.

Syntaks og bruk

Filer

For å sjekke om en fil eksisterer, bruk følgende syntaks:

[ -f ]

Uttrykket [ -f ] returnerer 0, dvs. suksess if eksisterer, og hvis den ikke eksisterer, returnerer den en status som ikke er null. Vanligvis brukes dette som en betingelse i hvis uttalelse.

hvis [ -f ] så fi

For å oppheve den returnerte verdien, bare gå foran -f med en negasjonsoperatør (!).

hvis [! -f ] så fi

I dette tilfellet vil betingelsen tilfredsstille hvis filen eksisterer ikke, da den returnerte ikke-null-statusen (false) vil bli negert og betraktet som 0 (sann).

Merk at hvis filen som skal sjekkes ikke eksisterer i gjeldende katalog og finnes i en annen katalog, bør hele banen til filen nevnes i stedet for bare filnavnet.

Kataloger

Lignende syntaks som brukes for å sjekke filer, brukes til å sjekke kataloger.

[ -d ]

I likhet med setningen for filer, returnerer denne setningen 0, dvs. suksess, hvis katalogen eksisterer, og en ikke null, dvs. feilstatus, returneres hvis den ikke eksisterer. Dette er også ofte brukt i en hvis erklæringstilstand.

hvis [ -d ] så fi

For å oppheve den returnerte statusen, gå foran -d med en negasjonsoperatør (!).

hvis [! -d ] så fi

Betingelsen vil tilfredsstille (status 0) i dette tilfellet hvis katalogen ikke eksisterer, og vil mislykkes (status ikke null) hvis katalogen eksisterer.

Som nevnt før for filer, hvis katalogen som skal sjekkes finnes på et annet sted og ikke den gjeldende katalogen, må hele katalogbanen angis i stedet for bare katalognavnet.

💡 Brakettens syntaks ( [...] ) brukt her er faktisk en Linux-kommando kalt test. Alternativene -f og -d er funksjonene til denne kommandoen. For mer informasjon, se manualsiden for test ( mann test ).

Sjekk fra et Bash-skript

I eksemplene ovenfor har vi brukt syntaksene direkte på terminalen. Skallet når det møter en løkke, eller en betinget uttalelse (hvis i vårt tilfelle), fortsetter den ledeteksten og lar brukeren gå inn for å fortsette blokkeringen.

De samme syntaksene kan brukes fra innsiden av et Bash-skript.

De #!/bin/bash ved starten spesifiserer tolken som skal brukes når filen kjøres. Selv om Bash er det mest brukte skallet i dag, foretrekker noen brukere skall som zsh, som bør spesifiseres i stedet for bash i starten av denne filen.

For å gi utførelsestillatelser for denne filen, kjør:

chmod +x test.sh

Til slutt, for å kjøre filen, løpe:

./test.sh