Creative Saplings

Jak správně zkontrolovat, zda soubor existuje v Bash nebo Shell (s příklady)

13 února, 2021
No Comments

Obsah

V tomto tutoriálu se budu zabývat různými atributy, které můžete použít při skriptování bash nebo shell pro kontrolu souborů a adresářů. Můžete použít podmíněné výrazy bash s ] nebo použít test s a zkontrolovat, zda soubor existuje.

Budeme používejte operátor bash if and else pro všechny příklady, takže bych vám doporučil přečíst: Bash if else průvodce používáním pro úplné začátečníky

1. Bash / Shell: Zkontrolujte, zda soubor existuje a je běžným souborem

V této části jsou uvedeny příklady ke kontrole, zda v bash existuje běžný soubor.

1.1: Metoda 1: Použití jednoduchých nebo dvojitých závorek

Použití dvojitých závorek ]

#!/bin/bashFILE="/etc/passwd"if ];then echo "$FILE exists"else echo "$FILE doesn"t exist"fi

Použití jednotlivých závorek

#!/bin/bashFILE="/etc/passwd"if ;then echo "$FILE exists"else echo "$FILE doesn"t exist"fi

1.2: Metoda 2: Použití příkazu test

test se používá ke kontrole typů souborů a porovnání hodnoty.

#!/bin/bashFILE="/etc/passwd"if test -f $FILE; then echo "$FILE exists"else echo "$FILE missing"fi

1.3: Metoda-3: Jeden řádek

V tomto příkladu zde můžeme použít jednoduché nebo dvojité závorky. Doporučuji vždy používat dvojité závorky, když píšete jeden linerový kód do shellu, protože to minimalizuje riziko upozornění na konzoli, když dojde k rozdělení slov.

#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists" || echo "$FILE missing"

Příkaz po && bude proveden, pokud ÚSPĚCH. Pokud první podmínka vrátí NEPRAVDA, bude proveden příkaz s ||.

Podobně pomocí testovacího příkazu zkontrolujte, zda existuje normální soubor v bash nebo shell skriptu v jednom řádku .

#!/bin/bashFILE="/etc/passwd"test -f $FILE && echo "$FILE exists" || echo "$FILE missing"

2. Bash / Shell: Zkontrolovat, zda soubor existuje (je prázdný nebo není prázdný)

Zkontrolovat, zda soubor existuje a pokud je prázdný nebo má nějaký obsah, použijeme atribut „-s“

2.1: Metoda 1: Použití jednoduchých nebo dvojitých závorek

Zkontrolujte, zda soubor existuje a je prázdný nebo není prázdný, pomocí dvojitých závorek ]

#!/bin/bashFILE="/etc/passwd"if ]; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi

Zkontrolujte, zda soubor existuje a je prázdný nebo není prázdný pomocí dvojitých závorek

if ; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi

2.2: Metoda 2: Použití testovacího příkazu

Pomocí testovacího příkazu kombinujeme atribut -s a zkontrolujeme, zda soubor existuje a je prázdný nebo má nějaký obsah:

2.3: Metoda-3: Jednořádkový

Pro takovou liner můžeme použít dvojité nebo jednoduché závorky, ale jak jsem již řekl, doporučil bych použít dvojité závorky.

#!/bin/bashFILE="/etc/passwd"test -s $FILE && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"

Podobně jako u testovacího příkazu můžeme použít && a || operátor zkontrolovat soubor v jednom řádku příkazu uvnitř našeho skriptu prostředí.

#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"

3. Bash / Shell: Zkontrolovat, zda adresář existuje

Doufám, že víte, že v Linuxu je všechno soubor. Tímto způsobem se tedy adresář považuje také za soubor. Pomocí atributu „-d“ můžeme zkontrolovat, zda v programování prostředí existuje adresář.

3.1: Metoda 1: Použití dvojitých nebo jednoduchých závorek

Ke kontrole můžeme použít atribut -d v jedné nebo dvojitých závorkách ] pokud adresář existuje.

#!/bin/bashDIR="/var/log"if ]; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

Podobně používáme v tomto příkladu jednotlivé závorky ke kontrole, zda je adresář přednastaven ve skriptu prostředí.

#!/bin/bashDIR="/var/log"if ; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

3.2: Metoda 2: Použití testovacího příkazu

V tomto příkladu použijeme testovací příkaz, abychom se ujistili, zda je adresář přítomen nebo ne, než provedeme určitou úlohu.

#!/bin/bashDIR="/var/log"if test -d $DIR; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

3.3: Metoda-3: Jednořádkový

V tomto příkladu použijeme ke kontrole jednoduchou a dvojitou závorku ve formě jednoho řádku pro adresář. Příkaz po operátoru && bude proveden, pokud je první podmínka TRUE a pokud je NEPRAVDA, bude proveden příkaz || podmínky .

#!/bin/bashDIR="/var/log"] && echo "$DIR exists" || echo "$DIR doesn"t exist"

Doporučil bych použít ] místo pro takové kódy liniové linky v programování prostředí.

Podobně jako u && a || můžeme použít testovací příkaz ke kontrole pokud adresář existuje

#!/bin/bashDIR="/var/log"test -d $DIR && echo "$DIR exists" || echo "$DIR doesn"t exist"

4. Bash / Shell: Zkontrolujte, zda adresář existuje (prázdný nebo není prázdný)

Neexistují žádné atributy shellu jak jsem použil ve všech ostatních příkladech a scénářích v tomto výukovém programu. Máme ale několik hacků, pomocí kterých můžeme zkontrolovat, zda je adresář prázdný nebo ne-prázdný.

4.1: Metoda-1: Seznam obsahu adresáře a ověření

V tomto příkladu uvedeme obsah adresáře, potlačíme výstup a poté na základě kódu ukončení zkontrolujeme, zda je adresář prázdný nebo obsahuje nějaké content

#!/bin/bashDIR="/tmp"if ls -1qA $DIR | grep -q . ; then echo "$DIR is not -empty"else echo "$DIR is empty"fi

Můžeme to také zvrátit uvedením podmínky NOT (!). Vypadalo by to takto:

#!/bin/bashDIR="/tmp"if ! ls -1qA $DIR | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

Výstup by byl stejný v obou příkladech skriptů.

4.2: Metoda 2: Použití příkaz find

Můžeme použít příkaz find a poté potlačit výstup a zkontrolovat, zda má cílový adresář nějaký obsah.

#!/bin/bashDIR="/tmp"if find -- "$DIR" -prune -type d -empty | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

4.3: Metoda 3: Seznam obsahu

Znovu, jak jsem již řekl, protože neexistuje snadný způsob, jak zkontrolovat, zda je adresář prázdný nebo zda nepoužívá některé atributy, vypíšeme obsah adresáře. Pokud nedostanete žádný výstup, pak je adresář prázdný nebo jinak není prázdný.

#!/bin/bashDIR="/tmp"if ] ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

5. Bash / Shell: Seznam atributů testovaného souboru

Podobně existuje mnoho dalších atributů, které můžete pomocí skriptů prostředí použít ke kontrole různých typů souborů, například symbolické odkazy, oprávnění souborů atd.

Atributy Co dělá?
-a FILE Pravda, pokud FILE existuje
-b FILE Pravda, pokud FILE existuje a jedná se o speciální blokový soubor.
-c FILE True if FILE existuje a je to speciální znakový soubor.
-d FILE True if FILE existuje a je adresářem.
Pravda, pokud FILE existuje
-f FILE True, pokud FILE existuje a je běžným souborem
-g FILE True, pokud existuje FILE a je nastaven jeho bit set-group-id
-h FILE Pravda, pokud FILE existuje a je symbolickým odkazem
-k FILE Pravda, pokud FILE existuje a je nastaven jeho „lepkavý“ bit
-p FILE Pravda, pokud FILE existuje a je pojmenovaná roura (FIFO)
-r FILE True if FILE existuje a je čitelný
-s FILE True if FILE existuje a má velikost větší než nula
-u FILE True, pokud FILE existuje a je nastaven jeho bit set-user-id
-w FILE True, pokud FILE existuje a je zapisovatelný
-x FILE True, pokud FILE existuje a je spustitelný
-G FILE Pravda, pokud FILE existuje a je vlastněna účinným ID skupiny
-L FILE Pravda, pokud FILE existuje a je symbolickým odkazem
-N FILE Pravda, pokud FILE existuje a byl od posledního čtení změněn
-o FILE Pravda, pokud FILE existuje a je ve vlastnictví efektivní ID uživatele
-S FILE Pravda, pokud FILE existuje a je soket
True, pokud FILE1 a FILE2 odkazují na stejné zařízení a čísla inode
FILE1 -nt FILE2 True, pokud FILE1 je novější (podle data úpravy) než FILE2, nebo pokud FILE1 existuje a FILE2 ano ne
FILE1 -ot FILE2 pravda, pokud je FILE1 starší než FILE2, nebo pokud FILE2 existuje a FILE1 není

Závěr

Articles
Previous Post

Jak říci, že jste vítáni ve francouzštině

Next Post

Jak nakonfigurovat vzdálený přístup a připojit se ke vzdálené instanci serveru SQL Server pomocí nástrojů ApexSQL

Napsat komentář Zrušit odpověď na komentář

Nejnovější příspěvky

  • Nejlepší fotografické školy na světě, 2020
  • Sovereign Citizens Take their Anti-Government Philosophy to the Roads
  • Průvodce náklady na opravy Stucco
  • Muckrakers (Čeština)
  • Precision Oncology (Čeština)

Archivy

  • Únor 2021
  • Leden 2021
  • Prosinec 2020
  • Listopad 2020
  • Říjen 2020
  • Září 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.