Hur man kontrollerar om en fil eller katalog finns i ett Bash Shell-skript

Kontrollera om en fil eller katalog finns från ett Bash-skript

Bash används för att automatisera regelbundet körda kommandon i Linux. Kommandon som är avsedda för operationer på filer/kataloger används ganska ofta, och vanligtvis måste vi, innan vi kör ett sådant kommando, kontrollera om den specifika filen eller katalogen finns. Låt oss se hur man utför denna kontroll.

Syntax och användning

Filer

För att kontrollera om en fil finns, använd följande syntax:

[ -f ]

Uttrycket [ -f ] returnerar 0, d.v.s. framgång om existerar, och om det inte finns returnerar det en status som inte är noll. Vanligtvis används detta som ett villkor i om påstående.

om [ -f ] då fi

För att negera det returnerade värdet, helt enkelt föregå -f med en negationsoperator (!).

om [ ! -f ] sedan fi

I detta fall kommer villkoret att uppfylla om filen existerar inte, eftersom den returnerade statusen som inte är noll (falsk) kommer att negeras och betraktas som 0 (sant).

Observera att om filen som ska kontrolleras inte finns i den aktuella katalogen och finns i någon annan katalog, ska den fullständiga sökvägen till filen nämnas istället för endast filnamnet.

Kataloger

Liknande syntax som används för att kontrollera filer används för att kontrollera kataloger.

[ -d ]

I likhet med satsen för filer, returnerar denna sats 0, d.v.s. framgång, om katalogen existerar, och en icke-noll, dvs felstatus returneras om den inte existerar. Detta används också ofta i en om uttalande villkor.

om [ -d ] då fi

För att upphäva den returnerade statusen, gå före -d med en negationsoperator (!).

om [ ! -d ] sedan fi

Villkoret kommer att uppfylla (status 0) i detta fall om katalogen inte finns, och kommer att misslyckas (status ej noll) om katalogen finns.

Som nämnts tidigare för filer, om katalogen som ska kontrolleras finns på en annan plats och inte den aktuella katalogen, måste hela katalogsökvägen anges istället för bara katalognamnet.

💡 Konsolens syntax ( [...] ) som används här är faktiskt ett Linux-kommando som kallas testa. Alternativen -f och -d är funktionerna i detta kommando. För mer information, se manualsidan för testet ( man test ).

Kolla från ett Bash-skript

I exemplen ovan har vi använt syntaxerna direkt på terminalen. Skalet när det stöter på en loop eller ett villkorligt uttalande (om i vårt fall), fortsätter den prompten och låter användaren gå in i fortsätt blocket.

Samma syntaxer kan användas inifrån ett Bash-skript.

De #!/bin/bash vid starten anger tolken som ska användas när filen körs. Även om Bash är det mest använda skalet nuförtiden, föredrar vissa användare skal som zsh, som bör anges i stället för bash i början av den här filen.

För att ge exekveringsbehörigheter för denna fil, kör:

chmod +x test.sh

Till sist, för att köra filen, springa:

./test.sh