Hoe te controleren of een bestand of map bestaat in een Bash Shell-script

Controleren of een bestand of map bestaat uit een Bash-script

Bash wordt gebruikt voor het automatiseren van regelmatig uitgevoerde opdrachten in Linux. Commando's die bedoeld zijn voor bewerkingen op bestanden/directories worden vrij vaak gebruikt, en meestal moeten we, voordat we een dergelijk commando uitvoeren, controleren of het specifieke bestand of de specifieke directory bestaat. Laten we eens kijken hoe we deze controle kunnen uitvoeren.

Syntaxis en gebruik

Bestanden

Om te controleren of een bestand bestaat, gebruik de volgende syntaxis:

[ -F  ]

De uitdrukking [ -F ] geeft 0 terug, d.w.z. succes als bestaat, en als het niet bestaat, retourneert het een status die niet nul is. Meestal wordt dit gebruikt als een voorwaarde in de als stelling.

als [ -f ] dan fi

Om de geretourneerde waarde te negeren, gewoon voorafgaan aan de -F met een ontkenningsoperator (!).

als [ ! -f ] dan fi

In dit geval zal aan de voorwaarde worden voldaan als het bestand bestaat niet, aangezien de geretourneerde niet-nulstatus (false) wordt genegeerd en als 0 (true) wordt beschouwd.

Merk op dat als het te controleren bestand niet bestaat in de huidige map en wel in een andere map, het volledige pad van het bestand moet worden vermeld in plaats van alleen de bestandsnaam.

Directory's

Soortgelijke syntaxis als gebruikt voor het controleren van bestanden wordt gebruikt voor het controleren van mappen.

[ -D  ]

Net als de instructie voor bestanden, retourneert deze instructie 0, d.w.z. succes, als de map bestaat, en een niet-nul, d.w.z. de storingsstatus wordt geretourneerd als deze niet bestaat. Dit wordt ook vaak gebruikt in een als verklaring voorwaarde.

als [ -d ] dan fi

Om de geretourneerde status te negeren, gaat u vooraf aan de -D met een ontkenningsoperator (!).

als [ ! -d ] dan fi

De voorwaarde zal in dit geval voldoen (status 0) als de directory niet bestaat, en zal mislukken (status niet nul) als de directory wel bestaat.

Zoals eerder vermeld voor bestanden, als de te controleren map op een andere locatie bestaat en niet de huidige map, moet het hele mappad worden ingevoerd in plaats van alleen de mapnaam.

💡 De haakjessyntaxis ( [...] ) die hier wordt gebruikt, is eigenlijk een Linux-opdracht genaamd test. De opties -F en -D zijn de kenmerken van deze opdracht. Voor meer informatie, zie de handleiding van test ( man test ).

Controleren vanuit een Bash-script

In de bovenstaande voorbeelden hebben we de syntaxis rechtstreeks op de terminal gebruikt. De shell wanneer deze een lus of een voorwaardelijke instructie tegenkomt (als in ons geval), gaat het door met de prompt en laat het de gebruiker het blok voortzetten.

Dezelfde syntaxis kan worden gebruikt vanuit een Bash-script.

De #!/bin/bash aan het begin specificeert de interpreter die moet worden gebruikt wanneer het bestand wordt uitgevoerd. Hoewel Bash tegenwoordig de meest gebruikte shell is, geven sommige gebruikers de voorkeur aan shells zoals zsh, die moet worden opgegeven in plaats van bash aan het begin van dit bestand.

Uitvoerrechten geven voer voor dit bestand uit:

chmod +x test.sh

Eindelijk, om het bestand uit te voeren, loop:

./test.sh