logo

„Bash“ patikrinkite, ar failas egzistuoja

Dažniausiai galime rasti situaciją, kai gali tekti atlikti veiksmą, kuris patikrins, ar failas yra, ar ne.

„Bash“ galime naudoti „testo komandą“, kad patikrintume, ar failas egzistuoja, ir nustatytume failo tipą.

Toliau pateikiamos testo komandos sintaksės ir galime naudoti bet kurią iš šių komandų:

 test expression [ expression ] [[ expression ]] 

Kad mūsų scenarijus būtų nešiojamas visuose POSIX apvalkaluose, turime naudoti vieną skliaustą „[“ komandą. Atnaujintoje testo komandos versijoje yra dvigubi skliaustai „[[“, kurie palaikomi daugumoje šiuolaikinių sistemų, naudojančių Bash, Zsh ir Ksh kaip numatytąjį apvalkalą.

Patikrinkite, ar failas egzistuoja

Tikrinant, ar failas egzistuoja, dažniausiai naudojami failų operatoriai yra -e ir -f. Parinktis „-e“ naudojama norint patikrinti, ar failas egzistuoja neatsižvelgiant į tipą, o parinktis „-f“ naudojama norint grąžinti tikrąją reikšmę tik tuo atveju, jei failas yra įprastas failas (ne katalogas ar įrenginys).

Dažniausia parinktis patikrinti, ar failas egzistuoja, ar ne, yra naudoti testo komandą su „if sąlyginiu sakiniu“.

Toliau pateikiami pavyzdžiai, kaip patikrinti, ar failas „read_file.txt“ egzistuoja:

1 būdas

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

2 būdas

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

3 būdas

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

Išvestis

Visų trijų metodų išvestis bus tokia, kaip nurodyta toliau, nes kataloge yra failas (read_file.txt):

leksikografinė tvarka
 read_file.txt exist 

Jei norime atlikti veiksmą, kuris pateiks rezultatą pagal tai, ar failas egzistuoja, ar ne, galime naudoti if/the konstrukciją tokiu būdu:

Pavyzdys

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

Išvestis

 read_file.txt exist 

Taip pat galime naudoti testo komandą be if sakinio. Galime naudoti bet kurį iš šių metodų:

1 būdas

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

2 būdas

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

3 būdas

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

Išvestis

pd sujungti

Visų trijų metodų išvestis bus tokia, kaip nurodyta toliau, nes kataloge yra failas (read_file.txt):

 read_file.txt exist 

Jei po && operatoriaus turi būti vykdomos kelios komandos, jas įrašykite į skliaustus, atskirtus kabliataškiu (;) arba AND (&&), t. y.:

Pavyzdys

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

Skirtingai nuo &&, teiginys po || operatorius vykdomas tik tuo atveju, jei bandomosios komandos išėjimo būsena yra „false“.

Pavyzdys

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

Išvestis

 read_file.txt exist 

Tai yra dažniausiai Bash naudojami metodai, norint patikrinti, ar failas egzistuoja, ar ne.

Patikrinkite, ar yra katalogas

Operatorius „-d“ leidžia mums patikrinti, ar failas yra katalogas, ar ne.

Toliau pateikiami metodai, kaip patikrinti, ar „Javatpoint“ katalogas egzistuoja:

1 būdas

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

2 būdas

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

Pastaba:Taip pat galime naudoti dvigubus skliaustus „[[“ vietoj vieno skliausto „[“.

Išvestis

Abiejų aukščiau nurodytų metodų išvestis bus tokia, kaip nurodyta, nes nurodytoje vietoje yra katalogas (pavadintas Javatpoint):

 Javatpoint is a directory 

Patikrinkite, ar failas neegzistuoja

Testo išraišką galima paneigti naudojant šauktuką (! -logical NOT operatorius). Peržiūrėkite šį pavyzdį:

Pavyzdys

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

Aukščiau esantis scenarijus taip pat gali būti parašytas taip:

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

Išvestis

 missing_read_file.txt unavailable 

Failų tikrinimo operatoriai

Bandymo komandos apima šiuos failų operatorius, kurie leidžia mums patikrinti tam tikrų tipų failus:

-b Failo grąžinimas „Tiesa“, jei FILE egzistuoja kaip specialus bloko failas.
-c Failo grąžinimas „Tiesa“, jei FILE egzistuoja kaip specialaus simbolio failas.
-d Failo grąžinimas „Tiesa“, jei FILE egzistuoja kaip katalogas.
-e Failo grąžinimas „Tiesa“, jei FAILAS egzistuoja kaip failas, neatsižvelgiant į tipą (mazgas, katalogas, lizdas ir kt.).
-f Failo grąžinimas „Tiesa“, jei FILE egzistuoja kaip įprastas failas (ne katalogas ar įrenginys).
-G failo grąžinimas „Tiesa“, jei FILE egzistuoja ir jame yra ta pati grupė, kaip ir vartotojas vykdo komandą.
-h Failas grąžina „Tiesa“, jei FILE egzistuoja kaip simbolinė nuoroda.
-g Failo grąžinimas „Tiesa“, jei FAILAS egzistuoja ir jame yra set-group-id (sgid) vėliavėlės rinkinys.
-k Failas grąžina „Tiesa“, jei FILE egzistuoja ir jame yra lipniųjų bitų vėliavėlių rinkinys.
-L failo grąžinimas „Tiesa“, jei FILE egzistuoja kaip simbolinė nuoroda.
-O Failo grąžinimas „Tiesa“, jei failas egzistuoja ir priklauso vartotojui, kuris vykdo komandą.
-p Failas grąžina „Tiesa“, jei FILE egzistuoja kaip vamzdis.
-r Failas grąžina „Tiesa“, jei FILE egzistuoja kaip skaitomas failas.
-S failo grąžinimas „Tiesa“, jei FILE yra kaip lizdas.
-s failo grąžinimas „Tiesa“, jei FILE egzistuoja ir jo dydis yra nulinis.
-u Failo grąžinimas „Tiesa“, jei FILE egzistuoja ir nustatyta žyma set-user-id (suid).
-w Failas grąžina „Tiesa“, jei FILE egzistuoja kaip įrašomas failas.
-x failo grąžinimas „Tiesa“, jei FILE egzistuoja kaip vykdomasis failas.