Većinu vremena možemo pronaći situaciju u kojoj ćemo morati izvršiti radnju koja će provjeriti postoji li datoteka ili ne.
U Bashu možemo koristiti 'test naredbu' da provjerimo postoji li datoteka i odredimo vrstu datoteke.
Slijedi sintaksa naredbe test, a možemo koristiti bilo koju od ovih naredbi:
test expression [ expression ] [[ expression ]]
Od nas se zahtijeva da koristimo naredbu s jednom zagradom '[' kako bismo našu skriptu učinili prenosivom za sve POSIX ljuske. Nadograđena verzija testne naredbe sadrži dvostruke zagrade '[[' koje je podržano na većini modernih sustava koji koriste Bash, Zsh i Ksh kao zadanu ljusku.
Provjerite postoji li datoteka
Prilikom provjere postoji li datoteka, najčešće korišteni operatori datoteke su -e i -f. Opcija '-e' koristi se za provjeru postoji li datoteka bez obzira na vrstu, dok se opcija '-f' koristi za vraćanje prave vrijednosti samo ako je datoteka obična datoteka (ne direktorij ili uređaj).
Najčešća opcija za provjeru postoji li datoteka ili ne je korištenje test naredbe s 'if uvjetnom naredbom'.
Slijede primjeri za provjeru postoji li datoteka 'read_file.txt':
Metoda 1
#!/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
Metoda 3
#!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi
Izlaz
Izlaz za sve tri metode bit će kao ispod jer imamo datoteku (read_file.txt) koja se nalazi u direktoriju:
primjer java klase
read_file.txt exist
Ako želimo izvesti radnju koja će dati rezultat na temelju toga postoji li datoteka ili ne, možemo upotrijebiti konstrukciju if/then na sljedeći način:
Primjer
#!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi
Izlaz
read_file.txt exist
Naredbu test možemo koristiti i bez naredbe if. Možemo koristiti bilo koju od sljedećih metoda:
Metoda 1
#!/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'
Metoda 3
#!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist'
Izlaz
Izlaz za sve tri metode bit će kao ispod jer imamo datoteku (read_file.txt) koja se nalazi u direktoriju:
read_file.txt exist
Ako postoji nekoliko naredbi koje treba pokrenuti nakon && operatora, tada ih stavite u vitičaste zagrade odvojene točkom-zarezom(;) ili I (&&), tj.:
Primjer
#!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; }
Za razliku od &&, iskaz nakon || operator se izvršava samo ako je status izlaza testne naredbe 'false'.
Primjer
#!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist'
Izlaz
read_file.txt exist
Ovo su najčešće korištene metode u Bashu za provjeru postoji li datoteka ili ne.
Provjerite postoji li imenik
Operator '-d' omogućuje nam da testiramo je li datoteka direktorij ili nije.
Slijede metode za provjeru postoji li direktorij 'Javatpoint':
Metoda 1
#!/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'
Bilješka:Također možemo koristiti dvostruke zagrade '[[' umjesto jednostruke zagrade '['.
Izlaz
Izlaz za obje gore navedene metode bit će sljedeći jer imamo direktorij (nazvan Javatpoint) prisutan na navedenoj lokaciji:
Javatpoint is a directory
Provjerite AKO datoteka ne postoji
Testni izraz može se negirati korištenjem uskličnika (! -logički NOT operator). Pogledajte sljedeći primjer:
Primjer
#!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi
Gornja skripta također se može napisati kao ispod:
#!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable'
Izlaz
java programi
missing_read_file.txt unavailable
Operatori testa datoteke
Testne naredbe uključuju sljedeće operatore datoteka koji nam omogućuju testiranje određenih vrsta datoteka:
-b Vraća datoteke | 'Istina' ako DATOTEKA postoji kao blok posebna datoteka. |
-c Vraća datoteke | 'Istina' ako DATOTEKA postoji kao datoteka s posebnim znakovima. |
-d Vraća datoteke | 'Istina' ako DATOTEKA postoji kao direktorij. |
-e Vraća datoteke | 'Istina' ako DATOTEKA postoji kao datoteka, bez obzira na vrstu (čvor, direktorij, utičnica itd.). |
-f Vraća datoteke | 'Istina' ako DATOTEKA postoji kao obična datoteka (ne direktorij ili uređaj). |
-G Vraća datoteke | 'Istina' ako DATOTEKA postoji i sadrži istu grupu kao korisnik koji izvodi naredbu. |
-h Vraća datoteku | 'Istina' ako DATOTEKA postoji kao simbolička veza. |
-g Vraća datoteke | 'Istina' ako DATOTEKA postoji i sadrži postavljenu oznaku set-group-id (sgid). |
-k Vraća datoteke | 'Istina' ako DATOTEKA postoji i sadrži postavljenu oznaku ljepljivog bita. |
-L Vraća datoteke | 'Istina' ako DATOTEKA postoji kao simbolička veza. |
-O Vraća datoteke | 'Istina' ako DATOTEKA postoji iu vlasništvu je korisnika koji izvodi naredbu. |
-p Vraća datoteke | 'Istina' ako DATOTEKA postoji kao cijev. |
-r Vraća datoteku | 'Istina' ako DATOTEKA postoji kao čitljiva datoteka. |
-S Vraća datoteke | 'Istina' ako DATOTEKA postoji kao utičnica. |
-s Vraća datoteke | 'Istina' ako DATOTEKA postoji i ima veličinu različitu od nule. |
-u Vraća datoteke | 'Istina' ako DATOTEKA postoji i postavljena je zastavica set-user-id (suid). |
-w Vraća datoteku | 'Istina' ako DATOTEKA postoji kao datoteka u koju je moguće pisati. |
-x Vraća datoteke | 'Istina' ako DATOTEKA postoji kao izvršna datoteka. |