Android

Jak zkontrolovat, zda existuje soubor nebo adresář v bash

PowerShell in Azure Cloud Shell GA | Azure Friday

PowerShell in Azure Cloud Shell GA | Azure Friday

Obsah:

Anonim

Při psaní skriptů Shell se mnohokrát ocitnete v situaci, kdy je třeba provést akci na základě 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 forem syntaxe:

test EXPRESSION]

Zkontrolujte, zda soubor existuje

Při kontrole, zda soubor existuje, jsou nejčastěji používanými operátory FILE -e a -f . První zkontroluje, zda soubor existuje bez ohledu na typ, zatímco druhý vrátí true pouze v případě, že FILE je běžný soubor (nikoli adresář nebo zařízení).

Nejčitelnější možností při kontrole, zda soubor existuje nebo ne, je použít příkaz test v kombinaci s příkazem if. Kterýkoli z úryvků níže zkontroluje, zda existuje soubor /etc/resolv.conf :

FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if]; then echo "$FILE exist" fi

Pokud chcete provést jinou akci na základě toho, zda soubor existuje nebo ne, jednoduše použijte konstrukci if / then:

FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi Vždy používejte dvojité uvozovky, abyste se vyhnuli problémům se soubory, které v jejich názvech obsahují mezery.

Příkaz test můžete také použít bez příkazu if. Příkaz po operátoru && bude proveden pouze tehdy, je-li stav ukončení testovacího příkazu pravdivý, test -f /etc/resolv.conf && echo "$FILE exist"

&& echo "$FILE exist"

] && echo "$FILE exist"

&& { echo "$FILE exist"; cp "$FILE" /tmp/; }

Naproti && , prohlášení po || operátor bude proveden, pouze pokud je výstupní stav testovacího příkazu false .

&& echo "$FILE exist" || echo "$FILE does not exist"

Zkontrolujte, zda adresář existuje

Operátoři -d vám umožňují otestovat, zda je soubor adresářem nebo ne.

Například pro kontrolu, zda existuje adresář /etc/docker , byste použili:

FILE=/etc/docker if; then echo "$FILE is a directory" fi

&& echo "$FILE is a directory"

Můžete také použít dvojité závorky , 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));

Zkontrolujte, zda soubor neexistuje

Podobně jako v mnoha jiných jazycích lze testovací výraz negovat pomocí ! (vykřičník) logicky není operátor:

FILE=/etc/docker if; then echo "$FILE does not exist" fi

Stejné jako výše:

&& echo "$FILE does not exist"

Zkontrolujte, zda existuje více souborů

Namísto použití složitých vnořených, pokud / else konstrukty můžete použít -a (nebo && with ; then echo "$FILE is a directory" fi

FILE=/etc/docker if; then echo "$FILE is a directory" fi

Ekvivalentní varianty bez použití příkazu IF:

&& echo "both files exist"

] && echo "both files exist"

Operátoři testu souborů

Příkaz test obsahuje následující operátory SOUBORU, které vám umožňují testovat konkrétní typy souborů:

  • -b FILE - Pravda, pokud existuje SOUBOR a jedná se o speciální soubor bloku. -c FILE - Pravda, pokud FILE existuje a je souborem speciálních znaků. -d FILE - Pravda, pokud FILE existuje a je adresářem. -e FILE - Pravda, pokud FILE existuje a je souborem, bez ohledu na typ (uzel, adresář, soket atd.). -f FILE - Pravda, pokud existuje SOUBOR a jedná se o běžný soubor (nikoli adresář nebo zařízení). -G FILE - Pravda, pokud FILE existuje a má stejnou skupinu jako uživatel, který příkaz spouští. -h FILE - Pravda, pokud FILE existuje a je symbolickým odkazem. -g FILE - Pravda, pokud FILE existuje a má nastaven příznak set-group-id (sgid). -k FILE - Pravda, pokud FILE existuje a má nastavený příznak lepkavého bitu. -L FILE - Pravda, pokud FILE existuje a je symbolickým odkazem. -O FILE - Pravda, pokud FILE existuje a je vlastněn uživatelem spouštějícím příkaz. -p FILE - Pravda, pokud existuje SOUBOR a jedná se o potrubí. -r FILE - Pravda, pokud FILE existuje a je čitelný. -S FILE - Pravda, pokud FILE existuje a je soket. -s FILE - Pravda, pokud FILE existuje a má nenulovou velikost. -u FILE - Pravda, pokud je nastaven příznak existující a nastavený uživatel-id (suid). -w FILE - Pravda, pokud FILE existuje a je zapisovatelný. -x FILE - Pravda, pokud FILE existuje a je spustitelný.

Závěr

V této příručce jsme vám ukázali, jak zkontrolovat, zda existuje soubor nebo adresář pomocí Bash.

bash terminál