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. |