logo

Bash Scripting – Jak zkontrolovat, zda soubor existuje

V tomto článku napíšeme bash skript, který zkontroluje, zda soubory existují nebo ne.

Syntaxe:

  • test [výraz]
  • [výraz]
  • [[výraz]]

Zde ve výrazu píšeme parametr a název souboru . Podívejme se na některé parametry, které lze ve výrazu použít: –

  • F: Vrací True, pokud soubor existuje jako běžný (běžný) soubor.
  • -d : vrátí True, pokud adresář existuje. -e : Vrací hodnotu True, pokud existuje jakýkoli typ souboru. -c : Vrací hodnotu True, pokud soubor znaků existuje. -r : Vrací hodnotu True, pokud existuje čitelný soubor.
  • v : Vrací True, pokud existuje zapisovatelný soubor .
  • -x : Vrací hodnotu True, pokud existuje spustitelný soubor. -p : Vrací hodnotu True, pokud soubor existuje jako kanál. -S : Vrací hodnotu True, pokud soubor existuje jako soket. -s : vrátí True, pokud soubor existuje a velikost souboru není nulová. -L : Vrací True, pokud soubor symbolického odkazu existuje . -g : Vrací True, pokud soubor existuje a je nastaven příznak hold set group id.. -G : t vrátí True, pokud soubor existuje a obsahuje stejné ID skupiny, které se zpracovává. -k : Vrací True, pokud soubor existuje a je nastaven příznak sticky bit.

Nyní jsou zde některé další parametry pro srovnání mezi těmito dvěma soubory.



    -ef: Vrací hodnotu True, pokud oba soubory existují a označují stejný soubor.

Příklad:

FirstFile -ef SecondFile>
    -nt: Vrací hodnotu True, pokud je první soubor novější než druhý soubor.

Příklad:

sql výběr více tabulek
FirstFile -nt FileOld>
    -ot: Vrací hodnotu True, pokud je první soubor starší než druhý soubor.

Příklad:

FirstFile -ot SecondFile>

Vezměme si několik příkladů založených na syntaxi:

    [ výraz ]: Nejprve vytvořte soubor s názvem FirstFile.sh a napište do něj následující skript
#!/bin/bash # using [ expression ] syntax and in place # of File.txt you can write your file name if [ -f 'File.txt' ]; then # if file exist the it will be printed echo 'File is exist' else # is it is not exist then it will be printed echo 'File is not exist' fi>

Nyní uložte a spusťte soubor pomocí následujícího příkazu

$ chmod +x ./FirstFile.sh $ ./FirstFile.sh>

Výstup :

Výstup

Poznámka: Protože soubor File.txt je přítomen v systému. Vytisklo se tedy Soubor existuje .

    test [výraz]: Nyní upravte výše uvedený skript v souboru FirstFile.sh následovně
#!/bin/bash # using test expression syntax and in place # of File2.txt you can write your file name if test -f 'File2.txt' ; then # if file exist the it will be printed echo 'File is exist' else # is it is not exist then it will be printed echo 'File is not exist' fi>

Nyní znovu uložte a spusťte soubor pomocí následujícího příkazu

$ chmod +x ./FirstFile.sh $ ./FirstFile.sh>

Výstup :

Výstup

Poznámka: Protože soubor 2.txt není v systému přítomen. Vytisklo se tedy Soubor neexistuje .

    [[ výraz ]]: Znovu upravte výše uvedený skript v souboru FirstFile.sh následovně
#!/bin/bash # using [[ expression ]] syntax and in place # of File3.txt you can write your file name if test -f 'File3.txt' ; then # if file exist the it will be printed echo 'File is exist' else # is it is not exist then it will be printed echo 'File is not exist' fi>

Nyní znovu uložte a spusťte soubor pomocí následujícího příkazu

 $ chmod +x ./FirstFile.sh $ ./FirstFile.sh>

Výstup :

Výstup

Poznámka: Protože soubor File3.txt je přítomen v systému. Takže to vytisklo File is exist .

java převést int na řetězec

Podívejme se na příklad založený na parametrech:

    Použití parametru -d: Vytvořte soubor s názvem FirstDir.sh a napište do něj následující skript
!/bin/bash if [[ -d 'GFG_dir' ]] ; # Here GFG_dir is directory and in place of GFG_dir you can write your Directory name then echo 'Directory is exist' # If GFG_dir exist then it will be printed else echo 'Directory is not exist' # If GFG_dir is not exist then it will be printed fi>

Nyní uložte a spusťte soubor pomocí následujícího příkazu

np nuly
$ chmod +x ./FirstDir.sh $ ./FirstDir.sh>

Výstup :

Výstup

Poznámka: Protože GFG_dir je přítomen v systému. Takže to vytisklo Directory is exist .

Podobně můžete použít -F , -To je , -V , -r , -C ,atd. (podle jejich použití) místo -d pro kontrolu existence různých typů souborů.

Podívejme se na příklad založený na porovnání dvou souborů:

  • Použitím -nt parametr

Vytvořte název souboru Comparison_File.sh a napište následující skript

#!/bin/bash # New_file.txt and Old_File.txt are names of two files. if [[ 'New_File.txt' -nt 'Old_File.txt' ]] ; then # This will be printed if Condition is true echo 'New_File.txt is newer than Old_File.txt' else # This will be printed if Condition is False echo 'New_File.txt is not newer than Old_File.txt' fi>

Nyní uložte a spusťte soubor pomocí následujícího příkazu

 $  chmod +x ./Comparison_File.sh $ ./Comparison_File.sh>

Výstup :

Výstup

Poznámka: Protože oba soubory jsou v systému přítomny a New_File.txt je novější než Old_File.txt

Podívejme se na příklad Zkontrolujte, zda soubor neexistuje:

Vytvořte soubor s názvem Check_Exist.sh a napište do něj následující skript

#!/bin/bash # using ! before -f parameter to check if # file does not exist if [[ ! -f 'GFG.txt' ]] ; then # This will printed if condition is True echo 'File is not exist' else # This will be printed if condition is False echo 'File is exist' fi>

Nyní uložte a spusťte soubor pomocí následujícího příkazu

 $ chmod +x ./Check_Exist.sh $  ./Check_Exist.sh>

Výstup :

Výstup

Poznámka: GFG.txt není v systému přítomen. Takže vytiskne Soubor neexistuje

Podívejme se na příklad bez použití podmínky If-else:

Vytvořte soubor s názvem Geeks_File.sh a napište do něj následující skript

#!/bin/bash # If File exist then first statement will be # printed and if it is not exist then 2nd # statement will be printed. [ -f 'GFG_File.txt' ] && echo 'File is exist' || echo 'File is not exist'>

Nyní uložte a spusťte soubor pomocí následujícího příkazu

mylivericket
 $ chmod +x ./Geeks_File.sh $ ./Geeks_File.sh>

Výstup :

Výstup

Poznámka: Protože soubor GFG_File.txt je v systému přítomen. Takže to vytisklo File is exist .