logo

Bash tarkistaa, onko tiedosto olemassa

Useimmiten saatamme löytää tilanteen, jossa meidän on ehkä suoritettava toiminto, joka tarkistaa, onko tiedosto olemassa vai ei.

Bashissa voimme käyttää 'testikomentoa' tarkistaaksemme, onko tiedosto olemassa, ja määrittää tiedoston tyypin.

Seuraavat ovat testikomennon syntaksit, ja voimme käyttää mitä tahansa näistä komennoista:

 test expression [ expression ] [[ expression ]] 

Meidän on käytettävä yhtä hakasulkukomentoa '[', jotta skriptimme voidaan siirtää kaikille POSIX-kuorille. Testikomennon päivitetty versio sisältää kaksoissulkeet '[[', jota tuetaan useimmissa nykyaikaisissa järjestelmissä, jotka käyttävät Bashia, Zsh:ta ja Ksh:ta oletuskuorena.

Tarkista, onko tiedosto olemassa

Kun tarkistetaan, onko tiedosto olemassa, yleisimmin käytetyt tiedostooperaattorit ovat -e ja -f. Vaihtoehtoa '-e' käytetään tarkistamaan, onko tiedosto olemassa tyypistä riippumatta, kun taas vaihtoehtoa '-f' käytetään todellisen arvon palauttamiseen vain, jos tiedosto on tavallinen tiedosto (ei hakemisto tai laite).

Yleisin tapa tarkistaa, onko tiedosto olemassa vai ei, on käyttää testikomentoa 'if-ehtolausekkeen' kanssa.

Seuraavassa on esimerkkejä, joiden avulla voit tarkistaa, onko read_file.txt-tiedosto olemassa:

Menetelmä 1

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

Menetelmä 2

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

Menetelmä 3

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

Lähtö

Kaikkien kolmen menetelmän tulos on alla, koska meillä on tiedosto (read_file.txt) hakemistossa:

panda sulaa
 read_file.txt exist 

Jos haluamme suorittaa toiminnon, joka antaa tuloksen sen perusteella, onko tiedosto olemassa vai ei, voimme käyttää if/then -rakennetta seuraavalla tavalla:

Esimerkki

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

Lähtö

 read_file.txt exist 

Voimme käyttää testikomentoa myös ilman if-lausetta. Voimme käyttää mitä tahansa seuraavista tavoista:

Menetelmä 1

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

Menetelmä 2

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

Menetelmä 3

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

Lähtö

Kaikkien kolmen menetelmän tulos on alla, koska meillä on tiedosto (read_file.txt) hakemistossa:

 read_file.txt exist 

Jos &&-operaattorin jälkeen on suoritettava useita komentoja, kirjoita komennot hakasulkeisiin erotettuina puolipisteellä (;) tai AND:lla (&&), eli:

Esimerkki

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

Toisin kuin &&, lausekkeen || jälkeen -operaattori suoritetaan vain, jos testikomennon poistumistila on 'false'.

Esimerkki

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

Lähtö

 read_file.txt exist 

Nämä ovat Bashissa yleisesti käytettyjä tapoja tarkistaa, onko tiedosto olemassa vai ei.

Tarkista, onko hakemisto olemassa

Operaattorin '-d' avulla voimme testata, onko tiedosto hakemisto vai ei.

Seuraavilla tavoilla voit tarkistaa, onko Javapoint-hakemisto olemassa:

Menetelmä 1

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

Menetelmä 2

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

Huomautus:Voimme myös käyttää kaksoissulkeita '[[' yksittäisen hakasulkeen '[' sijasta.

Lähtö

lajitella arraylist java

Molempien yllä olevien menetelmien tulos on alla, koska meillä on hakemisto (nimeltään Javapoint) määritetyssä paikassa:

 Javatpoint is a directory 

Tarkista, JOS tiedostoa ei ole olemassa

Testilauseke voidaan mitätöidä käyttämällä huutomerkkiä (! -logical NOT -operaattori). Katso seuraava esimerkki:

Esimerkki

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

Yllä oleva skripti voidaan kirjoittaa myös seuraavasti:

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

Lähtö

 missing_read_file.txt unavailable 

Tiedoston testausoperaattorit

Testikomennot sisältävät seuraavat tiedostooperaattorit, joiden avulla voimme testata tietyntyyppisiä tiedostoja:

-b Tiedoston palautus 'True', jos TIEDOSTO on olemassa lohkon erityistiedostona.
-c Tiedoston palautus 'True', jos FILE on olemassa erikoismerkkitiedostona.
-d Tiedoston palautus 'True', jos TIEDOSTO on olemassa hakemistona.
-e Tiedoston palautus 'True', jos TIEDOSTO on olemassa tiedostona tyypistä (solmu, hakemisto, socket jne.) riippumatta.
-f Tiedoston palautus 'True', jos TIEDOSTO on olemassa tavallisena tiedostona (ei hakemistona tai laitteena).
-G Tiedoston palautus 'True', jos TIEDOSTO on olemassa ja sisältää saman ryhmän kuin käyttäjä suorittaa komentoa.
-h Tiedoston palautus 'True', jos TIEDOSTO on olemassa symbolisena linkkinä.
-g Tiedoston palautus 'True', jos TIEDOSTO on olemassa ja sisältää set-group-id (sgid) -lippusarjan.
-k Tiedoston palautus 'True', jos TIEDOSTO on olemassa ja sisältää sticky bit flag -joukon.
-L Tiedoston palautukset 'True', jos TIEDOSTO on olemassa symbolisena linkkinä.
-O Tiedoston palautukset 'True', jos TIEDOSTO on olemassa ja sen omistaa komentoa suorittava käyttäjä.
-p Tiedoston palautus 'True', jos TIEDOSTO on olemassa putkena.
-r Tiedoston palautus 'True', jos FILE on luettavissa oleva tiedosto.
-S Tiedoston palautukset 'True', jos TIEDOSTO on olemassa vastakkeena.
-s Tiedoston palautus 'True', jos TIEDOSTO on olemassa ja sen koko on nollasta poikkeava.
-u Tiedoston palautukset 'True', jos TIEDOSTO on olemassa ja set-user-id (suid) -lippu on asetettu.
-w Tiedoston palautus 'True', jos TIEDOSTO on olemassa kirjoitettavana tiedostona.
-x Tiedoston palautus 'True', jos TIEDOSTO on olemassa suoritettavana tiedostona.