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ů:
-
-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ář.