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