logo

Bash zkontroluje, zda soubor existuje

Většinu času můžeme najít situaci, kdy možná budeme muset provést akci, která zkontroluje, zda soubor existuje nebo ne.

V Bash můžeme použít „testovací příkaz“ ke kontrole, zda soubor existuje, a určení typu souboru.

Níže jsou uvedeny syntaxe příkazu test a můžeme použít kterýkoli z těchto příkazů:

 test expression [ expression ] [[ expression ]] 

Abychom učinili náš skript přenositelným pro všechny shelly POSIX, musíme použít jeden příkaz „[“ v závorce. Upgradovaná verze příkazu test obsahuje dvojité závorky '[[', které jsou podporovány na většině moderních systémů používajících Bash, Zsh a Ksh jako výchozí shell.

Zkontrolujte, zda soubor existuje

Při kontrole, zda soubor existuje, jsou nejběžněji používané souborové operátory -e a -f. Volba '-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 v případě, že soubor je běžný soubor (nikoli adresář nebo zařízení).

Nejběžnější možností, jak zkontrolovat, zda soubor existuje nebo ne, je použití příkazu test s příkazem „if podmíněný příkaz“.

Níže jsou uvedeny příklady, jak zkontrolovat, zda soubor 'read_file.txt' existuje:

Metoda 1

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

Metoda 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

Metoda 3

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

Výstup

Výstup pro všechny tři metody bude následující, protože v adresáři máme soubor (read_file.txt):

herec chiranjeevi
 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 následujícím způsobem:

Příklad

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

Výstup

 read_file.txt exist 

Příkaz test můžeme použít i bez příkazu if. Můžeme použít kteroukoli z následujících metod:

Metoda 1

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

Metoda 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

Metoda 3

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

Výstup

Výstup pro všechny tři metody bude následující, protože v adresáři máme soubor (read_file.txt):

 read_file.txt exist 

Pokud má být za operátorem && spuštěno několik příkazů, uzavřete příkazy do složených závorek oddělených středníkem(;) nebo AND (&&), tj.:

Příklad

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

Na rozdíl od &&, příkaz za || operátor se provede pouze tehdy, je-li výstupní stav testovacího příkazu 'false'.

Příklad

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

Výstup

 read_file.txt exist 

Toto jsou běžně používané metody v Bash ke kontrole, zda soubor existuje nebo ne.

Zkontrolujte, zda adresář existuje

Operátor '-d' nám umožňuje otestovat, zda je soubor adresářem nebo ne.

Níže jsou uvedeny metody, jak zkontrolovat, zda adresář 'Javatpoint' existuje:

Metoda 1

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

Metoda 2

 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

Poznámka:Můžeme také použít dvojité závorky '[[' místo jednoduché závorky '['.

Výstup

vložení řazení java

Výstup pro obě výše uvedené metody bude následující, protože v zadaném umístění máme adresář (pojmenovaný Javatpoint):

 Javatpoint is a directory 

Zkontrolujte, zda soubor neexistuje

Testovací výraz lze negovat pomocí vykřičníku (! -logický operátor NOT). Podívejte se na následující příklad:

Příklad

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

Výše uvedený skript lze také napsat takto:

 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

Výstup

 missing_read_file.txt unavailable 

Operátoři testování souborů

Testovací příkazy zahrnují následující souborové operátory, které nám umožňují testovat konkrétní typy souborů:

-b Vrací soubor 'True', pokud FILE existuje jako speciální blokový soubor.
-c Vrací soubor 'True', pokud SOUBOR existuje jako soubor se speciálními znaky.
-d Vrací soubor 'True', pokud FILE existuje jako adresář.
-e Návraty souboru 'True', pokud FILE existuje jako soubor, bez ohledu na typ (uzel, adresář, soket atd.).
-f Soubor Vrátí 'True', pokud FILE existuje jako běžný soubor (nikoli adresář nebo zařízení).
-G Soubor se vrací 'True', pokud FILE existuje a obsahuje stejnou skupinu jako uživatel spouští příkaz.
-h Soubor vrátí 'True', pokud SOUBOR existuje jako symbolický odkaz.
-g Soubor Vrátí 'True', pokud FILE existuje a obsahuje sadu příznaků set-group-id (sgid).
-k Vrací soubor 'True', pokud SOUBOR existuje a obsahuje sadu příznaků sticky bit.
-L Soubor se vrací 'True', pokud SOUBOR existuje jako symbolický odkaz.
-O Soubor se vrací 'True', pokud FILE existuje a je vlastněn uživatelem, který spouští příkaz.
-p Soubor vrátí 'True', pokud SOUBOR existuje jako roura.
-r Soubor Vrátí 'True', pokud FILE existuje jako čitelný soubor.
-S soubor se vrací 'True', pokud FILE existuje jako soket.
-s Soubor vrátí 'True', pokud SOUBOR existuje a má nenulovou velikost.
-u Soubor se vrací 'True', pokud FILE existuje a je nastaven příznak set-user-id (suid).
-w Vrací soubor 'True', pokud FILE existuje jako zapisovatelný soubor.
-x Vrací soubor 'True', pokud FILE existuje jako spustitelný soubor.