Úvod
V Linuxu existuje několik funkcí, které fungují pouze v případě, že určitý soubor nebo adresář existuje. Bash je shell, který interpretuje příkazy. Můžete použít a
V této příručce se dozvíte, jak pomocí příkazu bash zkontrolovat, zda soubor nebo adresář existuje.

Předpoklady
- Operační systém Linux
- Přístup do okna terminálu / příkazového řádku (Ctrl-Alt-T / Ctrl-Alt-F2)
Jak zkontrolovat, zda soubor existuje
Chcete-li otestovat soubor /tmp/test.log , zadejte z příkazového řádku následující:
test –f /tmp/test.txt
První řádek provede test, aby se zjistilo, zda soubor existuje. Druhý příkaz, echo , zobrazí výsledky 0, což znamená, že soubor existuje, 1 znamená, že nebyl nalezen žádný soubor.
echo $?
V našem příkladu byl výsledek 1.

Nyní zkuste vytvořit soubor a poté jej otestovat:
touch /tmp/test.txt
test –f /tmp/test.txt
echo $?
Protože jsme soubor vytvořili předem, výsledek je nyní 0:

Místo testu můžete také použít hranaté závorky příkaz:
[ –f /tmp/test.txt ]
echo $?
Jak zkontrolovat, zda adresář existuje
Chcete-li zkontrolovat, zda adresář existuje, vypněte –f možnost test příkaz pro –d (pro adresář):
test –d /tmp/test
echo $?
Vytvořte tento adresář a znovu spusťte test:
touch /tmp/test
test –d /tmp/test
echo $?
Tento příkaz funguje stejně jako pro soubory, takže místo testu použijete závorky příkaz funguje i zde.
Jak zkontrolovat, zda soubor neexistuje
Testování souboru obvykle vrátí 0 (true), pokud soubor existuje, a 1 (false), pokud soubor neexistuje. U některých operací možná budete chtít obrátit logiku. Je užitečné, když napíšete skript pro vytvoření konkrétního souboru, pouze pokud ještě neexistuje.
Chcete-li vytvořit soubor, pokud ještě neexistuje, zadejte na příkazový řádek následující:
[ ! –f /tmp/test.txt ] && touch /tmp/test.txt
Vykřičník ! znamená ne . Tento příkaz zajistí, že není soubor s názvem test.txt v /tmp adresář. Neuvidíte, že se něco stane.
Chcete-li zjistit, zda systém vytvořil soubor, zadejte následující:
ls /tmp
Měli byste vidět test.txt uvedeny. Pro adresář můžete použít podobný příkaz – nahraďte –f možnost s –d :
[ ! –d /tmp/test ] && touch /tmp/test
Jak zkontrolovat více souborů
Chcete-li testovat dva soubory současně, použijte && možnost přidat druhý soubor:
[ -f /tmp/test.txt && -f /tmp/sample.txt ] && echo “Both files were found”
Chcete-li otestovat více souborů pomocí zástupného znaku, jako je hvězdička * pro různé znaky:
[ -f /tmp/*.jpg ] && echo “Files were found”
Jako obvykle, změna –f možnost –d umožňuje spustit stejný test pro více adresářů.
Operátoři testování souborů k nalezení konkrétních typů souborů
Zde je několik příkazů, které můžete otestovat, abyste našli konkrétní typy souborů:
- -f – soubor
- -d – adresář
- – L – symbolický odkaz
- -r – čitelné
- -x – spustitelný
- –w – zapisovatelný
K dispozici je mnoho dalších možností. Další možnosti naleznete na hlavní stránce (test ––help).
Práce s úryvky kódu
Předchozí příkazy fungují dobře pro jednoduchý dvouřádkový příkaz na příkazovém řádku. Můžete také použít bash s více příkazy. Když je několik příkazů spojeno dohromady, nazývají se skript .
skript se obvykle uloží jako soubor a spustí. Skriptování také používá logické operátory k testování podmínky a poté provádí akci na základě výsledků testu.
Chcete-li vytvořit soubor skriptu, použijte editor Nano k otevření nového souboru:
sudo nano bashtest.sh
Zadejte jeden z úryvků zespodu, včetně #!/bin/bash identifikátor. Použijte Ctrl-o uložte soubor a poté Ctrl-x k ukončení Nano. Poté spusťte skript zadáním:
bash bashtest.sh
Následující fragment kódu testuje přítomnost konkrétního souboru. Pokud soubor existuje, skript zobrazí Soubor existuje na obrazovce.
#!/bin/bash
if [ -f /tmp/test.txt ]
then
echo “File exists”
fi
Funguje to stejně, pokud hledáte adresář. Stačí nahradit –f možnost s –d :
#!/bin/bash
if [ -d /tmp/test ]
then
echo “File exists”
fi
Tento příkaz zkontroluje adresář /tmp/test . Pokud existuje, systém zobrazí Soubor existuje .