logo

Bash skontrolujte, či súbor existuje

Väčšinu času sa môžeme stretnúť so situáciou, kedy možno budeme musieť vykonať akciu, ktorá skontroluje, či súbor existuje alebo nie.

V Bash môžeme použiť „testovací príkaz“ na kontrolu, či súbor existuje a určiť typ súboru.

Nasledujú syntaxe príkazu test a môžeme použiť ktorýkoľvek z týchto príkazov:

 test expression [ expression ] [[ expression ]] 

Musíme použiť jeden príkaz „[“ v zátvorke, aby bol náš skript prenosný pre všetky shelly POSIX. Aktualizovaná verzia testovacieho príkazu obsahuje dvojité zátvorky '[[', ktoré sú podporované na väčšine moderných systémov používajúcich Bash, Zsh a Ksh ako predvolený shell.

Skontrolujte, či súbor existuje

Pri kontrole, či súbor existuje, najčastejšie používané operátory súborov sú -e a -f. Voľba '-e' sa používa na kontrolu, či súbor existuje bez ohľadu na typ, zatiaľ čo možnosť '-f' sa používa na vrátenie skutočnej hodnoty iba vtedy, ak je súbor bežným súborom (nie adresárom alebo zariadením).

Najbežnejšou možnosťou, ako skontrolovať, či súbor existuje alebo nie, je použitie príkazu test s príkazom „ak je podmienený“.

Nasledujú príklady, ako skontrolovať, či súbor 'read_file.txt' existuje:

Metóda 1

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

Metóda 2

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

Metóda 3

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

Výkon

Výstup pre všetky tri metódy bude nasledujúci, pretože v adresári máme súbor (read_file.txt):

string.compareto c#
 read_file.txt exist 

Ak chceme vykonať akciu, ktorá poskytne výsledok na základe toho, či súbor existuje alebo nie, môžeme použiť konštrukciu if/then nasledujúcim spôsobom:

Príklad

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

Výkon

 read_file.txt exist 

Príkaz test môžeme použiť aj bez príkazu if. Môžeme použiť ktorúkoľvek z nasledujúcich metód:

Metóda 1

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

Metóda 2

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

Metóda 3

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

Výkon

rajesh khanna

Výstup pre všetky tri metódy bude nasledujúci, pretože v adresári máme súbor (read_file.txt):

 read_file.txt exist 

Ak za operátorom && treba spustiť niekoľko príkazov, uzatvorte príkazy do zložených zátvoriek oddelených bodkočiarkou (;) alebo AND (&&), t. j.:

Príklad

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

Na rozdiel od &&, výraz za || operátor sa vykoná iba vtedy, ak je stav ukončenia testovacieho príkazu 'false'.

Príklad

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

Výkon

 read_file.txt exist 

Toto sú bežne používané metódy v Bash na kontrolu, či súbor existuje alebo nie.

Skontrolujte, či adresár existuje

Operátor '-d' nám umožňuje otestovať, či je súbor adresárom alebo nie.

Nasledujú spôsoby, ako skontrolovať, či existuje adresár 'Javatpoint':

Metóda 1

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

Metóda 2

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

Poznámka:Môžeme tiež použiť dvojité zátvorky '[[' namiesto jednej zátvorky '['.

Výkon

Výstup pre obe vyššie uvedené metódy bude nasledujúci, pretože máme adresár (s názvom Javatpoint) prítomný v určenom umiestnení:

 Javatpoint is a directory 

Skontrolujte, či súbor neexistuje

Testovací výraz možno negovať pomocou výkričníka (! -logický operátor NOT). Pozrite si nasledujúci príklad:

Príklad

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

Vyššie uvedený skript môže byť napísaný aj takto:

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

Výkon

 missing_read_file.txt unavailable 

Operátori testovania súborov

Testovacie príkazy zahŕňajú nasledujúce operátory súborov, ktoré nám umožňujú testovať konkrétne typy súborov:

-b Návraty súboru 'True', ak FILE existuje ako blokový špeciálny súbor.
-c Návraty súboru 'True', ak FILE existuje ako súbor so špeciálnymi znakmi.
-d Návraty súboru 'True', ak FILE existuje ako adresár.
-e Návraty súboru 'True', ak FILE existuje ako súbor, bez ohľadu na typ (uzol, adresár, soket atď.).
-f Súbor sa vráti 'True', ak FILE existuje ako bežný súbor (nie adresár alebo zariadenie).
-G Návraty súboru 'True', ak FILE existuje a obsahuje rovnakú skupinu ako používateľ spúšťa príkaz.
-h Návraty súboru „Pravda“, ak SÚBOR existuje ako symbolický odkaz.
-g Návraty súboru 'True', ak FILE existuje a obsahuje sadu príznakov set-group-id (sgid).
-k Návraty súboru 'True', ak FILE existuje a obsahuje nastavený príznak lepkavého bitu.
-L Vrátenie súboru „Pravda“, ak SÚBOR existuje ako symbolický odkaz.
-O Súbor sa vracia 'True', ak FILE existuje a je vo vlastníctve používateľa, ktorý spúšťa príkaz.
-p Návraty súboru 'True', ak SÚBOR existuje ako kanál.
-r Vráti súbor 'True', ak FILE existuje ako čitateľný súbor.
-S Návraty súboru 'True', ak FILE existuje ako soket.
-s Návraty súboru 'True', ak FILE existuje a má nenulovú veľkosť.
-u Návraty súboru 'True', ak FILE existuje a je nastavený príznak set-user-id (suid).
-w Návraty súboru 'True', ak FILE existuje ako zapisovateľný súbor.
-x Návraty súboru 'True', ak FILE existuje ako spustiteľný súbor.