Jak zkontrolovat, zda soubor nebo adresář existuje v Bash

Při psaní skriptů Shell se mnohokrát můžete ocitnout v situaci, kdy budete muset provést akci podle toho, zda soubor existuje nebo ne .

V Bash můžete pomocí příkazu test zkontrolovat, zda soubor existuje, a určit typ souboru.

Příkaz test má jednu z následujících syntaxí:

Pokud chcete, aby byl váš skript přenosný, měli byste raději použít starý test ; then echo "$FILE exists."fi

Chcete-li provést jinou akci podle toho, zda soubor existuje, nebo ne jednoduše použijte konstrukci if / then:

Vždy používejte uvozovky, abyste se vyhnuli problémům při práci se soubory obsahující mezery v jejich jménech.

Můžete také použít testovací příkaz bez příkazu if. Příkaz po operátoru && bude proveden, pouze pokud je stav ukončení testovacího příkazu pravdivý,

Pokud chcete spusťte řadu příkazů poté, co && operátor jednoduše uzavře příkazy do složených závorek oddělených ; nebo &&:

Naproti &&, výroku za || operátor bude spuštěn, pouze pokud je stav ukončení testovacího příkazu false.

Zkontrolovat, zda existuje adresář #

Provozovatelé -d vám umožní otestovat, zda je soubor adresář nebo ne.

Například ke kontrole, zda existuje adresář /etc/docker, který byste použili:

Můžete také použít dvojité závorky ; then echo "$FILE does not exist."fi

Stejné jako výše:

Zkontrolujte, zda existuje více souborů #

Místo použití komplikovaných vnořených konstrukcí if / else můžete použít -a (nebo && s ; then echo "Both files exist."fi

Ekvivalentní varianty bez použití příkazu IF:

operátoři testování souborů #

Příkaz test obsahuje následující operátory SOUBORŮ, které vám umožňují testovat konkrétní typy souborů:

  • -b FILE – True, pokud SOUBOR existuje a jedná se o speciální soubor bloku.
  • -c FILE – True pokud SOUBOR existuje a jedná se o soubor se speciálními znaky.
  • -d FILE – True, pokud SOUBOR existuje a je adresářem.
  • -e FILE – Pravda, pokud SOUBOR existuje a je souborem, bez ohledu na typ (uzel, adresář, soket atd.).
  • -f FILE – True, pokud SOUBOR existuje a jedná se o běžný soubor (nikoli o adresář nebo zařízení).
  • -G FILE – True, pokud SOUBOR existuje a má stejnou skupinu jako uživatel, který příkaz spouští.
  • -h FILE – Pravda, pokud SOUBOR existuje a je symbolickým odkazem.
  • -g FILE – True, pokud SOUBOR existuje a má nastavený příznak set-group-id (sgid).
  • -k FILE – Pravda, pokud SOUBOR existuje a má nastavenou pevnou bitovou vlajku.
  • -L – Pravda, pokud SOUBOR existuje a je symbolickým odkazem.
  • -O FILE – True, pokud SOUBOR existuje a je vlastněn uživatelem, který spouští příkaz.
  • -p FILE – True, pokud SOUBOR existuje a je to roura.
  • -r FILE – Pravda, pokud SOUBOR existuje a je čitelný.
  • -S FILE – True, pokud SOUBOR existuje a je soket.
  • -s FILE – True, pokud SOUBOR existuje a má nenulovou velikost.
  • -u FILE – True, pokud existuje SOUBOR, a je nastaven příznak set-user-id (suid).
  • -w FILE – True, pokud SOUBOR existuje a je zapisovatelný.
  • -x FILE – Pravda, pokud SOUBOR existuje a je exe řezatelné.

Závěr #

V této příručce jsme vám ukázali, jak zkontrolovat, zda v Bash existuje soubor nebo adresář.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *