Mens du oppretter et bash-skript, kan du støte på en situasjon der du trenger å finne ut om en fil eksisterer eller ikke å utføre noe med det. Du kan bruke testkommandoen for å sjekke om filen eksisterer og hvilken type den er.
I denne opplæringen vil vi vise deg hvordan du sjekker om filen finnes i Linux-baserte operativsystemer.
Grunnleggende syntaks for testkommando
Den grunnleggende syntaksen til testkommandoen for å sjekke om filen eksisterer som vist nedenfor:
test -e file
Eller
test -f file
Hvor:
- -e
Dette alternativet vil sjekke om en fil eksisterer uavhengig av type. - -f
Dette alternativet vil sjekke om en fil bare eksisterer hvis FILEN er en vanlig fil.
Du bør se mannesiden til testkommandoen som vist nedenfor:
man test
Du skal se følgende skjermbilde :
Test om filen eksisterer ved hjelp av kommandolinjen
I denne delen viser vi deg hvordan sjekke om filen eksisterer ved hjelp av kommandolinjen:
Kjør følgende kommando for å sjekke om det finnes en fil med navnet / etc / fstab (T rue):
test -f /etc/fstab
Kjør deretter følgende kommando for å sette utgangskoden til 0 eller 1, når testen lyktes eller ikke.
echo $?
Utgang:
0
Utgangen er 0 som betyr at filen / etc / fstab eksisterer.
Du kan også bruk følgende kommando for å sjekke om filen eksisterer:
echo $0
Output:
0
Kjør deretter følgende kommando for å teste om filen / etc / fabab eksisterer ( Falsk).
test -f /etc/fabab
echo $?
Utgang:
1
Utgangen er 1 som betyr at filen / etc / fabab ikke eksisterer.
Du kan også teste om en fil med navnet /etc/rc.local eksisterer eller ikke bruker den bash-betingede kjøringen som vist nedenfor:
test -f /etc/rc.local && echo "Exists" || echo "Not Exists"
Eller
&& echo "Exists" || echo "Not Exists"
Hvis filen heter /etc/rc.local, bør du se følgende utdata:
Exists
Du kan også sjekke om det finnes flere filer eller ikke med en enkelt kommando:
&& echo "both files exist"
Eller
test -f /etc/passwd -a -f /etc/crontab && echo "both files exist"
Du bør se følgende utdata:
both files exist
Test om filen eksisterer i basken
I denne delen oppretter vi et bash-skript og sjekker om en fil eksisterer eller ikke, ved å skrive ut en melding.
Lar oss lage en fil som heter test.sh og sjekke om en fil /etc/rc.local eksisterer eller ikke:
nano test.sh
Legg til følgende linjer:
#!/bin/bash
FILE=/etc/rc.local
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Lagre og lukk filen, og kjør skriptet med følgende kommando:
bash test.sh
Du bør se følgende utdata:
The file "/etc/rc.local" exists.
Nå, la oss lage en filtest.sh og teste om filen / etc / rc.localad eksisterer av ikke:
nano test.sh
Legg til følgende linjer:
#!/bin/bash
FILE=/etc/rc.localad
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Lagre og lukk filen, og kjør skriptet med følgende kommando:
bash test.sh
Du bør se følgende utdata:
The file "/etc/rc.localad" is not exists.
Du kan også finne ut om en fil eksisterer eller ikke, og utføre noen handlinger på den i bash-skript.
Finn for eksempel en fil med navnet / etc / hosts og kopier den til / opt-katalogen hvis filen finnes.
For å gjøre det, opprett en fil med navnet test.sh:
nano test.sh
Legg til følgende linjer:
FILE=/etc/hosts
if ; then
cp $FILE /opt
fi
Lagre og lukk filen og kjør skriptet med følgende kommando:
Test nå / opt-katalogen med følgende kommando:
ls /opt/hosts
Du bør se vertsfilen i følgende utdata:
/opt/hosts
Du kan også bruke uttrykket! for å sjekke om filen ikke eksisterer.
Kjør for eksempel følgende kommando for å sjekke om filen / etc / hosting ikke eksisterer:
&& echo "File does not exist"
Eller
test ! -f /etc/hosting && echo "File does not exist"
Du bør se følgende utdata:
File does not exist
Test om katalogen eksisterer
Du kan også finne ut om det finnes en katalog eller ikke ved hjelp av alternativet -d.
Sjekk for eksempel om katalogen / etc / apache2 eksisterer eller ikke.
&& echo "Directory is exists"
Eller
test -d /etc/apache2 && echo "Directory is exists"
Du bør se følgende utgang:
Directory is exists
Du kan også opprette et bash-skript med betingede uttrykk for å sjekke om en katalog eksisterer eller ikke.
Opprett en fil som heter test.sh som vist nedenfor:
nano test.sh
Legg til følgende linjer:
Lagre og lukk filen når du er ferdig. Gi deretter riktig tillatelse med følgende kommando:
chmod 755 test.sh
Test deretter om katalogen / etc / nginx er tilgjengelig eller ikke med følgende kommando:
./test.sh /etc/nginx
Du bør se følgende utdata:
Directory /etc/nginx/ exists.
Test deretter om katalogen / etc / linux er tilgjengelig eller ikke med følgende kommando:
./test.sh /etc/linux
Du bør se følgende utdata:
Directory /etc/linux does not exists
File Testing Operators in Bash
Følgende filtestoperatører hjelper deg med å sjekke om en «fil» eksisterer og har spesifikke typer:
- -b
FILE eksisterer og er blokkeringsspesial - -c
FILE eksisterer og er tegnspesial - -d
FILE eksisterer og er en katalog - -e
FIL eksisterer - -f
FIL eksisterer og er en vanlig fil - -g
FIL eksisterer og er set-group-ID - -G
FIL eks ists og eies av den effektive gruppen ID - -h
FILE eksisterer og er en symbolsk lenke (samme som -L) - -k
FILE eksisterer og har dens klebrig bit sett - -L
FILE eksisterer og er en symbolsk lenke (samme som -h) - -O
FILE eksisterer og eies av den effektive brukeren ID - -p
FILE eksisterer og er et navngitt rør - -r
FILE eksisterer og lesetillatelse er gitt - -s
FIL eksisterer og har en størrelse større enn null - -S
FILE eksisterer og er en stikkontakt - -u
FILE eksisterer og dens set-user-ID bit er satt - -w
FILE eksisterer og skrivetillatelse er gitt - -x
FILE eksisterer og utfører (eller søk) tillatelse er gitt