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:
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ů:
-
-bFILE– True, pokud SOUBOR existuje a jedná se o speciální soubor bloku. -
-cFILE– True pokud SOUBOR existuje a jedná se o soubor se speciálními znaky. -
-dFILE– True, pokud SOUBOR existuje a je adresářem. -
-eFILE– Pravda, pokud SOUBOR existuje a je souborem, bez ohledu na typ (uzel, adresář, soket atd.). -
-fFILE– True, pokud SOUBOR existuje a jedná se o běžný soubor (nikoli o adresář nebo zařízení). -
-GFILE– True, pokud SOUBOR existuje a má stejnou skupinu jako uživatel, který příkaz spouští. -
-hFILE– Pravda, pokud SOUBOR existuje a je symbolickým odkazem. -
-gFILE– True, pokud SOUBOR existuje a má nastavený příznak set-group-id (sgid). -
-kFILE– Pravda, pokud SOUBOR existuje a má nastavenou pevnou bitovou vlajku. -
-L– Pravda, pokud SOUBOR existuje a je symbolickým odkazem. -
-OFILE– True, pokud SOUBOR existuje a je vlastněn uživatelem, který spouští příkaz. -
-pFILE– True, pokud SOUBOR existuje a je to roura. -
-rFILE– Pravda, pokud SOUBOR existuje a je čitelný. -
-SFILE– True, pokud SOUBOR existuje a je soket. -
-sFILE– True, pokud SOUBOR existuje a má nenulovou velikost. -
-uFILE– True, pokud existuje SOUBOR, a je nastaven příznak set-user-id (suid). -
-wFILE– True, pokud SOUBOR existuje a je zapisovatelný. -
-xFILE– 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ář.