Kuinka tarkistaa, onko tiedosto Bashissa tai Shellissä (esimerkkejä)
Sisällysluettelo
Tässä opetusohjelmassa käsittelen erilaisia määritteitä, joita voit käyttää bash- tai shell-komentosarjoissa tiedostojen ja hakemistojen tarkistamiseen. Voit käyttää bash-ehdollisia lausekkeita ]
-näppäimillä tai testata -toimintoa tarkistaaksesi, onko tiedosto olemassa.
Tulemme käytä bash if and else -operaattoria kaikissa esimerkeissä, joten suosittelen sinua lukemaan: Bash if else käyttöopas ehdottomille aloittelijoille
1. Bash / Shell: Tarkista onko tiedosto olemassa ja onko se tavallinen tiedosto
Tässä osassa on esimerkkejä siitä, onko bashissa säännöllinen tiedosto.
1.1: Menetelmä 1: Yksittäisten tai kaksoissulkeiden käyttö
Tuplasulkeiden käyttö ]
#!/bin/bashFILE="/etc/passwd"if ];then echo "$FILE exists"else echo "$FILE doesn"t exist"fi
Yksittäisten sulkeiden käyttö
#!/bin/bashFILE="/etc/passwd"if ;then echo "$FILE exists"else echo "$FILE doesn"t exist"fi
1.2: Menetelmä 2: Testikomennon käyttäminen
test
-komennolla tarkistetaan tiedostotyypit ja verrataan arvot.
#!/bin/bashFILE="/etc/passwd"if test -f $FILE; then echo "$FILE exists"else echo "$FILE missing"fi
1.3: Menetelmä 3: Yksirivinen
Tässä esimerkissä voidaan käyttää yksittäisiä tai kaksoissulkeita. Suosittelen aina käyttämään kaksoissulkeita, kun kirjoitat yhtä linjakoodia kuoressa, koska se minimoi varoituksen saamisen konsoliin sanojen jakamisen aikana.
#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists" || echo "$FILE missing"
Lauseke &&
jälkeen suoritetaan, jos MENESTYS. Jos ensimmäinen ehto palauttaa EPÄTOSI, suoritetaan lauseke ||
.
Vastaavasti testikomennolla tarkistaaksesi, onko bash- tai shell-komentosarjassa säännöllistä tiedostoa yhdellä rivillä .
#!/bin/bashFILE="/etc/passwd"test -f $FILE && echo "$FILE exists" || echo "$FILE missing"
2. Bash / Shell: Tarkista onko tiedosto olemassa (tyhjä vai tyhjä)
Tarkista onko tiedosto olemassa ja jos se on tyhjä tai jos siinä on jonkin verran sisältöä, käytämme attribuuttia ”-s
”
2.1: Menetelmä 1: Yksittäisten tai kaksoissulkeiden käyttö
Tarkista, onko tiedosto olemassa ja tyhjä vai tyhjä, hakasulkeilla ]
#!/bin/bashFILE="/etc/passwd"if ]; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi
Tarkista onko tiedosto on olemassa ja tyhjä tai ei tyhjä käyttämällä hakasulkeita
if ; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi
2.2: Menetelmä 2: Testikomennon käyttäminen
Testikomennon avulla yhdistämme -s
-attribuutin tarkistaaksesi, tiedosto on olemassa ja se on tyhjä tai siinä on jonkin verran sisältöä:
2.3: Menetelmä 3: Yksirivinen
Voimme käyttää sekä kaksois- että yksittäisiä hakasulkeita tälle yhdelle linjalle, mutta kuten aiemmin sanoin, suosittelen kaksoissulkeiden käyttöä.
#!/bin/bashFILE="/etc/passwd"test -s $FILE && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"
Samoin testikomennon kanssa voimme käyttää &&
ja ||
operaattori tarkistaa tiedoston yksirivisellä komennolla komentotulkkikomentomme sisällä.
#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"
3. Bash / Shell: Tarkista, onko hakemistoa olemassa
Toivon, että tiedät, että Linuxissa kaikki on tiedosto. Joten tällä tavalla hakemistoa pidetään myös tiedostona. Voimme käyttää ”-d
” -määritettä tarkistaaksesi onko hakemisto olemassa shell-ohjelmoinnissa.
3.1: Menetelmä 1: kaksois- tai yksittäisten sulkeiden käyttö
Voimme käyttää -d
-attribuuttia yksittäisissä tai kaksoissulkeissa
]
tarkistaa jos hakemisto on olemassa.
#!/bin/bashDIR="/var/log"if ]; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
Vastaavasti tässä esimerkissä käytämme yksittäisiä hakasulkeita tarkistamaan, onko hakemisto esiasetettu shell-komentosarjassa.
#!/bin/bashDIR="/var/log"if ; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
3.2: Metodi-2: Testikomennon käyttäminen
Tässä esimerkissä käytämme testikomentoa varmistaaksemme, onko hakemisto läsnä vai ei, ennen kuin suoritamme tietyn tehtävän.
#!/bin/bashDIR="/var/log"if test -d $DIR; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
3.3: Menetelmä 3: Yksirivi
Tässä esimerkissä käytämme yhden ja kahden hakasulkeita yhden rivin muodossa tarkistamaan hakemistolle. Lauseke &&
-operaattorin jälkeen suoritetaan, jos ensimmäinen ehto on TOSI ja jos se on EPÄTOSI, ||
ehto ”-lauseke suoritetaan .
#!/bin/bashDIR="/var/log"] && echo "$DIR exists" || echo "$DIR doesn"t exist"
Suosittelen ]
käyttöä sijaan tällaiselle yhdelle linjakoodille shell-ohjelmoinnissa.
Samoin kuin &&
ja ||
, voimme tarkistaa testikomennolla jos hakemisto on olemassa
#!/bin/bashDIR="/var/log"test -d $DIR && echo "$DIR exists" || echo "$DIR doesn"t exist"
4. Bash / Shell: Tarkista, onko hakemisto olemassa (tyhjä vai tyhjä)
Shell-määritteitä ei ole kuten olen käyttänyt kaikissa muissa esimerkissä ja skenaarioissa tässä opetusohjelmassa.Mutta meillä on joitain hakkereita, joiden avulla voimme tarkistaa, onko hakemisto tyhjä vai ei.
4.1: Menetelmä 1: Luettele hakemiston sisältö ja vahvista
Tässä esimerkissä luetellaan hakemiston sisältö, estetään lähtö ja tarkistetaan sitten poistumiskoodin perusteella, onko hakemisto tyhjä tai sisältääkö sitä sisältö
#!/bin/bashDIR="/tmp"if ls -1qA $DIR | grep -q . ; then echo "$DIR is not -empty"else echo "$DIR is empty"fi
Voimme myös kääntää tämän asettamalla NOT (!
) -ehdon. Joten se näyttäisi tältä:
#!/bin/bashDIR="/tmp"if ! ls -1qA $DIR | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi
Lähtö olisi sama molemmissa esimerkkiskripteissä.
4.2: Metodi-2: Käyttäminen find-komento
Voimme käyttää find-komentoa ja estää sitten lähdön tarkistamalla, onko kohdehakemistossa sisältöä vai ei.
#!/bin/bashDIR="/tmp"if find -- "$DIR" -prune -type d -empty | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi
4.3: Menetelmä 3: Luettele sisältö
Jälleen, kuten sanoin, koska ei ole helppoa tapaa tarkistaa, onko hakemisto tyhjä vai ei käytä joitain määritteitä, luetellaan hakemiston sisältö. Jos et saa tulostetta, hakemisto on tyhjä tai muuten tyhjä
#!/bin/bashDIR="/tmp"if ] ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi
5. Bash / Shell: Luettelo testitiedoston määritteistä
Vastaavasti on olemassa paljon enemmän määritteitä, joita voit käyttää shell-komentosarjoissa eri tiedostotyyppien tarkistamiseen, kuten symboliset linkit, tiedostojen oikeudet jne.
määritteet | Mitä se tekee? |
---|---|
-a FILE |
Tosi, jos FILE on olemassa |
-b FILE |
Tosi, jos FILE on olemassa ja se on erityinen lohkotiedosto. |
-c FILE |
Tosi, jos FILE on olemassa ja se on erityinen merkkitiedosto. |
-d FILE |
Tosi, jos FILE on olemassa ja se on hakemisto. |
Tosi, jos FILE on olemassa |
|
-f FILE |
Tosi, jos FILE on olemassa ja se on säännöllinen tiedosto |
-g FILE |
Tosi, jos FILE on olemassa ja sen set-group-id-bitti on asetettu |
-h FILE |
Tosi, jos FILE on olemassa ja se on symbolinen linkki |
-k FILE |
Tosi, jos FILE on olemassa ja sen ”tahmea” bitti on asetettu |
-p FILE |
Tosi, jos FILE on olemassa ja on nimetty putki (FIFO) |
-r FILE |
Tosi, jos FILE on olemassa ja luettavissa |
-s FILE |
Tosi, jos FILE on olemassa ja sen koko on suurempi kuin nolla |
-u FILE |
Tosi, jos FILE on olemassa ja sen set-user-id-bitti on asetettu |
-w FILE |
Tosi, jos FILE on olemassa ja kirjoitettavissa |
-x FILE |
Tosi, jos FILE on olemassa ja se voidaan suorittaa |
-G FILE |
Tosi, jos FILE on olemassa ja sen omistaa todellinen ryhmätunnus |
-L FILE |
Tosi, jos FILE on olemassa ja se on symbolinen linkki |
-N FILE |
Tosi, jos FILE on olemassa ja sitä on muokattu viimeksi luettuasi |
-o FILE |
Tosi, jos FILE on olemassa ja sen omistaa käyttäjätunnus |
-S FILE |
Tosi, jos FILE on olemassa ja on socket |
|
Tosi, jos FILE1 ja FILE2 viittaavat samaan laitteeseen ja inodinumerot |
FILE1 -nt FILE2 |
Tosi, jos FILE1 on uudempi (muokkauspäivämäärän mukaan) kuin FILE2 , tai jos FILE1 on olemassa ja FILE2 ei |
FILE1 -ot FILE2 |
Tosi, jos FILE1 on vanhempi kuin FILE2 , tai jos FILE2 on olemassa ja FILE1 ei |