Při vytváření bash skriptu se můžete setkat se situací, kdy potřebujete zjistit, zda soubor existuje nebo ne provést nějakou akci. Pomocí příkazu test můžete zkontrolovat, zda soubor existuje a jaký je typ.
V tomto výukovém programu vám ukážeme, jak zkontrolovat, zda soubor existuje v operačních systémech Linux.
Základní syntaxe testovacího příkazu
Základní syntaxe testovacího příkazu ke kontrole, zda soubor existuje, jak je uvedeno níže:
test -e file
Nebo
test -f file
Kde:
- -e
Tato možnost ověří, zda soubor existuje bez ohledu na typ. - -f
Tato možnost ověří, zda soubor existuje, pouze pokud je SOUBOR běžným souborem.
Měla by se zobrazit manuálová stránka testovacího příkazu, jak je uvedeno níže:
man test
Měla by se zobrazit následující obrazovka :
Vyzkoušejte, zda soubor existuje, pomocí příkazového řádku
V této části vám ukážeme jak zkontrolovat, zda soubor existuje pomocí příkazového řádku:
Spuštěním následujícího příkazu zkontrolujte, zda existuje soubor s názvem / etc / fstab (T rue):
test -f /etc/fstab
Dále spusťte následující příkaz a nastavte výstupní kód na 0 nebo 1, kdykoli bude test úspěšný, nebo ne.
echo $?
Výstup:
0
Výstup je 0, což znamená, že soubor / etc / fstab existuje.
Můžete také pomocí následujícího příkazu zkontrolujte, zda soubor existuje:
echo $0
Výstup:
0
Dále spusťte následující příkaz a otestujte, zda soubor / etc / fabab existuje ( False).
test -f /etc/fabab
echo $?
Výstup:
1
Výstup je 1, což znamená, že soubor / etc / fabab neexistuje.
Vy lze také otestovat, zda soubor s názvem /etc/rc.local existuje nebo nepoužívá podmíněné spuštění bash, jak je uvedeno níže:
test -f /etc/rc.local && echo "Exists" || echo "Not Exists"
Nebo
&& echo "Exists" || echo "Not Exists"
Pokud soubor s názvem /etc/rc.local existuje, měl by se zobrazit následující výstup:
Exists
Pomocí jediného příkazu můžete také zkontrolovat, zda existuje více souborů:
&& echo "both files exist"
Nebo
test -f /etc/passwd -a -f /etc/crontab && echo "both files exist"
Měli byste vidět následující výstup:
both files exist
Vyzkoušet, zda soubor existuje v Bashi
V této části vytvoříme bash skript a vytiskneme zprávu, zda soubor existuje nebo ne.
Umožňuje vytvořit soubor s názvem test.sh a zkontrolovat, zda soubor /etc/rc.local existuje nebo neexistuje:
nano test.sh
Přidejte následující řádky:
#!/bin/bash
FILE=/etc/rc.local
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Uložte a zavřete soubor a poté spusťte skript pomocí následujícího příkazu:
bash test.sh
Měli byste vidět následující výstup:
The file "/etc/rc.local" exists.
Nyní vytvořme soubor test.sh a otestujeme, zda soubor / etc / rc.localad existuje z not:
nano test.sh
Přidejte následující řádky:
#!/bin/bash
FILE=/etc/rc.localad
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Uložte a zavřete soubor a poté spusťte skript pomocí následujícího příkazu:
bash test.sh
Měli byste vidět následující výstup:
The file "/etc/rc.localad" is not exists.
Můžete také zjistit, zda soubor existuje nebo ne, a provést s ním nějakou akci v bash skriptu.
Například najděte soubor s názvem / etc / hosts a zkopírujte jej do adresáře / opt, pokud soubor existuje.
Chcete-li tak učinit, vytvořte soubor s názvem test.sh:
nano test.sh
Přidejte následující řádky:
FILE=/etc/hosts
if ; then
cp $FILE /opt
fi
Uložte a zavřete soubor a poté spusťte skript pomocí následujícího příkazu:
Nyní otestujte adresář / opt pomocí následujícího příkazu:
ls /opt/hosts
Soubor hostitelů byste měli vidět v následujícím výstupu:
/opt/hosts
Můžete také použít výraz! zkontrolovat, zda soubor neexistuje.
Například spuštěním následujícího příkazu zkontrolujte, zda soubor / etc / hosting neexistuje:
&& echo "File does not exist"
Nebo
test ! -f /etc/hosting && echo "File does not exist"
Měli byste vidět následující výstup:
File does not exist
Vyzkoušet, zda existuje adresář
Můžete také zjistit, zda adresář existuje nebo ne, pomocí volby -d.
Například zkontrolujte, zda existuje adresář / etc / apache2.
&& echo "Directory is exists"
Nebo
test -d /etc/apache2 && echo "Directory is exists"
Měli byste vidět následující výstup:
Directory is exists
Můžete také vytvořit bash skript s podmíněnými výrazy, abyste zkontrolovali, zda adresář existuje nebo ne.
Vytvořte soubor s názvem test.sh, jak je znázorněno níže:
nano test.sh
Přidejte následující řádky:
Po dokončení soubor uložte a zavřete. Poté udělejte správné povolení pomocí následujícího příkazu:
chmod 755 test.sh
Dále otestujte, zda je adresář / etc / nginx k dispozici nebo ne pomocí následujícího příkazu:
./test.sh /etc/nginx
Měli byste vidět následující výstup:
Directory /etc/nginx/ exists.
Dále otestujte, zda je adresář / etc / linux k dispozici nebo ne, pomocí následujícího příkazu:
./test.sh /etc/linux
Měli byste vidět následující výstup:
Directory /etc/linux does not exists
Operátoři testování souborů v Bash
Následující operátoři testování souborů vám pomohou zkontrolovat, zda „soubor“ existuje a má konkrétní typy:
- -b
SOUBOR existuje a je speciální blok - -c
SOUBOR existuje a je speciální znak - -d
SOUBOR existuje a je adresář - -e
SOUBOR existuje - -f
SOUBOR existuje a je běžným souborem - -g
SOUBOR existuje a je set-group-ID - -G
SOUBOR ex ists and is owned by the efficient group ID - -h
FILE exists and is a symbolic link (same as -L) - -k
SOUBOR existuje a má jeho lepkavá sada bitů - -L
SOUBOR existuje a je symbolickým odkazem (stejný jako -h) - -O
SOUBOR existuje a je ve vlastnictví účinného uživatele ID - -p
SOUBOR existuje a je pojmenovaným kanálem - -r
SOUBOR existuje a je uděleno oprávnění ke čtení - -s
SOUBOR existuje a má velikost větší než nula - -S
SOUBOR existuje a je soketem - -u
SOUBOR existuje a jeho bit set-user-ID je nastaveno - -w
SOUBOR existuje a je povoleno oprávnění k zápisu - -x
SOUBOR existuje a oprávnění k provádění (nebo vyhledávání) je uděleno