Většinou se můžeme setkat s situací, kdy budeme možná muset provést akci, která ověří, zda soubor existuje nebo ne.
V Bash můžeme pomocí „testovacího příkazu“ zkontrolovat, zda soubor existuje, a určit typ souboru.
Následuje syntaxe testovacího příkazu a my můžete použít kterýkoli z těchto příkazů:
Aby se náš skript stal přenosným pro všechny skořápky POSIX, musíme použít jediný příkaz „[“. Aktualizovaná verze testovacího příkazu obsahuje dvojité závorky „[[“, které je podporováno ve většině moderních systémů používajících jako výchozí shell Bash, Zsh a Ksh.
Zkontrolovat, zda soubor existuje
Při kontrole, zda soubor existuje, jsou nejčastěji používanými operátory souborů -e a -f. Možnost „-e“ se používá ke kontrole, zda soubor existuje bez ohledu na typ, zatímco volba „-f“ se používá k vrácení skutečné hodnoty, pouze pokud je soubor běžným souborem (nikoli adresářem nebo zařízením).
Nejběžnější možností, jak zkontrolovat, zda soubor existuje, je použít testovací příkaz s příkazem „if conditional“.
Následují příklady ke kontrole, zda je soubor „read_file“. Soubor txt „existuje:
Metoda 1
Metoda 2
Metoda 3
Výstup
Výstup pro všechny tři metody bude uveden níže, protože v adresáři je soubor (read_file.txt):
read_file.txt exist
Pokud chceme provést akci, která poskytne výsledek na základě toho, zda soubor existuje nebo ne, můžeme použít konstrukci if / then v následujícím způsobem:
Příklad
Výstup
read_file.txt exist
Můžeme také použít testovací příkaz bez příkazu if. Můžeme použít kteroukoli z následujících metod:
Metoda 1
Metoda 2
Metoda 3
Výstup
Výstup pro všechny tři metody bude uveden níže, protože v adresáři je soubor (read_file.txt):
read_file.txt exist
Příklad
Na rozdíl od & &, prohlášení za || operátor je spuštěn, pouze pokud je stav ukončení testovacího příkazu „false“.
Příklad
Výstup
read_file.txt exist
Toto jsou běžně používané metody v Bash ke kontrole, zda soubor existuje nebo ne.
Zkontrolovat, zda existuje adresář
Operátor „-d“ nám umožňuje otestovat, zda je soubor adresářem či nikoli.
Následují metody kontroly, zda existuje adresář „Javatpoint“:
Metoda 1
Metoda 2
Poznámka: Můžeme také použít dvojité závorky „[[“ místo jediné závorky “[“ .
Výstup
Výstup pro obě výše uvedené metody bude uveden níže, protože v zadaném umístění máme adresář (s názvem Javatpoint):
Javatpoint is a directory
Zkontrolovat, zda IF soubor neexistuje
Testovací výraz lze vyvrátit pomocí vykřičníku (! -logický operátor NOT). Podívejte se na následující příklad:
Příklad
Výše uvedený skript lze napsat také níže:
Výstup
missing_read_file.txt unavailable
Operátoři testování souborů
Testovací příkazy obsahují následující operátory souborů, které nám umožňují test pro konkrétní typy souborů:
-b FileReturns | „True“, pokud SOUBOR existuje jako speciální blok soubor. |
-c FileReturns | „True“, pokud SOUBOR existuje jako soubor se speciálními znaky. |
-d FileReturns | „True“, pokud SOUBOR existuje jako adresář. |
-e FileReturns | „True „pokud SOUBOR existuje jako soubor, bez ohledu na typ (uzel, adresář, soket atd.). |
-f FileReturns | “ True “ pokud SOUBOR existuje jako běžný soubor (nikoli jako adresář nebo zařízení). |
-G FileReturns | „True“, pokud SOUBOR existuje a obsahuje stejná skupina jako uživatel, který spouští komunikaci a. |
-h FileReturns | „True“, pokud SOUBOR existuje jako symbolický odkaz. |
-g FileReturns | „True“, pokud SOUBOR existuje a obsahuje sadu příznaků set-group-id (sgid). |
-k FileReturns | „True“, pokud SOUBOR existuje a obsahuje sadu příznaků lepivého bitu. |
-L FileReturns | „True“, pokud SOUBOR existuje jako symbolický odkaz. |
-O FileReturns | „True“, pokud SOUBOR existuje a je vlastněn uživatelem, který spouští příkaz. |
-p FileReturns | „True“, pokud SOUBOR existuje jako roura. |
– r FileReturns | „True“, pokud SOUBOR existuje jako čitelný soubor. |
-S FileReturns | „True“, pokud SOUBOR existuje jako soket. |
-s FileReturns | „True“, pokud SOUBOR existuje a má nenulovou velikost. |
-u FileReturns | „True“, pokud SOUBOR existuje a je nastaven příznak set-user-id (suid). |
-w FileReturns | „True“, pokud SOUBOR existuje jako zapisovatelný soubor. |
-x FileReturns | „True“, pokud SOUBOR existuje jako spustitelný soubor. |