logo

Bash preveri, ali datoteka obstaja

Večino časa se lahko zgodi, da bomo morda morali izvesti dejanje, ki bo preverilo, ali datoteka obstaja ali ne.

V Bashu lahko uporabimo 'test ukaz', da preverimo, ali datoteka obstaja, in določimo vrsto datoteke.

Spodaj so sintakse testnega ukaza in uporabimo lahko katerega koli od teh ukazov:

 test expression [ expression ] [[ expression ]] 

Uporabiti moramo ukaz z enim oklepajem '[', da bo naš skript prenosljiv za vse lupine POSIX. Nadgrajena različica testnega ukaza vsebuje dvojne oklepaje '[[', ki je podprt v večini sodobnih sistemov, ki uporabljajo Bash, Zsh in Ksh kot privzeto lupino.

Preverite, ali datoteka obstaja

Med preverjanjem, ali datoteka obstaja, sta najpogosteje uporabljena operatorja datoteke -e in -f. Možnost '-e' se uporablja za preverjanje, ali datoteka obstaja ne glede na vrsto, medtem ko se možnost '-f' uporablja za vrnitev prave vrednosti le, če je datoteka običajna datoteka (ne imenik ali naprava).

Najpogostejša možnost za preverjanje, ali datoteka obstaja ali ne, je uporaba testnega ukaza s pogojnim stavkom if.

Spodaj so primeri za preverjanje, ali datoteka 'read_file.txt' obstaja:

1. metoda

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

Metoda 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

3. metoda

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

Izhod

Izhod za vse tri metode bo kot spodaj, ker imamo v imeniku datoteko (read_file.txt):

abstraktni razred java
 read_file.txt exist 

Če želimo izvesti dejanje, ki bo zagotovilo rezultat glede na to, ali datoteka obstaja ali ne, lahko uporabimo konstrukcijo if/then na naslednji način:

Primer

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

Izhod

 read_file.txt exist 

Ukaz test lahko uporabimo tudi brez stavka if. Uporabimo lahko katero koli od naslednjih metod:

1. metoda

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

Metoda 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

3. metoda

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

Izhod

Izhod za vse tri metode bo kot spodaj, ker imamo v imeniku datoteko (read_file.txt):

 read_file.txt exist 

Če je za operatorjem && treba izvesti več ukazov, jih zapišite v zavite oklepaje, ločene s podpičjem(;) ali IN (&&), tj.:

Primer

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

Za razliko od &&, stavek za || se izvede le, če je izhodni status testnega ukaza 'false'.

hashmap v Javi

Primer

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

Izhod

 read_file.txt exist 

To so pogosto uporabljene metode v Bashu za preverjanje, ali datoteka obstaja ali ne.

Preverite, ali imenik obstaja

Operator '-d' nam omogoča preizkus, ali je datoteka imenik ali ne.

Sledijo metode za preverjanje, ali imenik 'Javatpoint' obstaja:

1. metoda

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

Metoda 2

 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

Opomba:Namesto enojnega oklepaja '[' lahko uporabimo tudi dvojne oklepaje '[['.

Izhod

Izhod za obe zgornji metodi bo naslednji, saj imamo imenik (imenovan Javatpoint), ki je prisoten na navedeni lokaciji:

 Javatpoint is a directory 

Preverite, ČE datoteka ne obstaja

Testni izraz je mogoče zanikati z uporabo klicaja (! -logični operator NOT). Oglejte si naslednji primer:

Primer

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

Zgornji skript je lahko zapisan tudi kot spodaj:

 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

Izhod

 missing_read_file.txt unavailable 

Operatorji za testiranje datotek

Testni ukazi vključujejo naslednje datotečne operaterje, ki nam omogočajo testiranje določenih vrst datotek:

-b Vrne datoteke 'True', če DATOTEKA obstaja kot posebna blokovna datoteka.
-c Vrne datoteke 'True', če DATOTEKA obstaja kot datoteka s posebnimi znaki.
-d Vrne datoteke 'True', če DATOTEKA obstaja kot imenik.
-e Vrne datoteke 'True', če DATOTEKA obstaja kot datoteka, ne glede na vrsto (vozlišče, imenik, vtičnica itd.).
-f Vrne datoteke 'True', če DATOTEKA obstaja kot navadna datoteka (ne imenik ali naprava).
-G Vrne datoteke 'True', če DATOTEKA obstaja in vsebuje isto skupino kot uporabnik, ki izvaja ukaz.
-h Vrne datoteke 'True', če DATOTEKA obstaja kot simbolna povezava.
-g Vrne datoteke 'True', če DATOTEKA obstaja in vsebuje nastavljeno zastavico set-group-id (sgid).
-k Vrne datoteke 'True', če DATOTEKA obstaja in vsebuje nastavljeno lepljivo bitno zastavico.
-L Vrne datoteke 'True', če DATOTEKA obstaja kot simbolna povezava.
-O Vrne datoteke 'True', če DATOTEKA obstaja in je v lasti uporabnika, ki izvaja ukaz.
-p Vrne datoteke »True«, če DATOTEKA obstaja kot cev.
-r Vrne datoteke 'True', če DATOTEKA obstaja kot berljiva datoteka.
-S Vrne datoteke 'True', če DATOTEKA obstaja kot vtičnica.
-s Vrne datoteke 'True', če DATOTEKA obstaja in ima različno velikost.
-u Vrne datoteke 'True', če DATOTEKA obstaja in je nastavljena zastavica set-user-id (suid).
-w Vrne datoteke 'True', če DATOTEKA obstaja kot zapisljiva datoteka.
-x Vrne datoteke 'True', če DATOTEKA obstaja kot izvršljiva datoteka.