Mens du opretter et bash-script, kan du muligvis støde på en situation, hvor du skal finde ud af, om en fil findes eller ikke at udføre en handling med det. Du kan bruge testkommandoen til at kontrollere, om filen findes, og hvilken type der er.
I denne vejledning viser vi dig, hvordan du kontrollerer, om filen findes i de Linux-baserede operativsystemer.
Grundlæggende syntaks for testkommando
Den grundlæggende syntaks for testkommandoen for at kontrollere, om filen findes som vist nedenfor:
test -e file
Eller
test -f file
Hvor:
- -e
Denne indstilling kontrollerer, om der findes en fil uanset type. - -f
Denne indstilling kontrollerer, om der kun findes en fil, hvis FILEN er en almindelig fil.
Du skal se mandsiden til testkommandoen som vist nedenfor:
man test
Du skal se følgende skærmbillede :
Test hvis filen findes ved hjælp af kommandolinje
I dette afsnit viser vi dig hvordan man kontrollerer, om der findes en fil ved hjælp af kommandolinjen:
Kør følgende kommando for at kontrollere, om der findes en fil med navnet / etc / fstab (T rue):
test -f /etc/fstab
Kør derefter følgende kommando for at indstille udgangskoden til 0 eller 1, hver gang testen lykkedes eller ikke.
echo $?
Output:
0
Outputtet er 0, hvilket betyder, at filen / etc / fstab findes.
Du kan også Brug følgende kommando til at kontrollere, om filen findes:
echo $0
Output:
0
Kør derefter følgende kommando for at teste, om filen / etc / fabab findes ( Falsk).
test -f /etc/fabab
echo $?
Output:
1
Outputtet er 1, hvilket betyder, at filen / etc / fabab ikke findes.
Dig kan også teste om en fil med navnet /etc/rc.local findes eller ikke bruger den bash-betingede udførelse som vist nedenfor:
test -f /etc/rc.local && echo "Exists" || echo "Not Exists"
Eller
&& echo "Exists" || echo "Not Exists"
Hvis filen med navnet /etc/rc.local findes, skal du se følgende output:
Exists
Du kan også kontrollere, om der findes flere filer eller ikke ved hjælp af en enkelt kommando:
&& echo "both files exist"
Eller
test -f /etc/passwd -a -f /etc/crontab && echo "both files exist"
Du skal se følgende output:
both files exist
Test om filen findes i bash
I dette afsnit opretter vi et bash-script og kontrollerer, om en fil findes eller ej, ved at udskrive en besked.
Lad os oprette en fil med navnet test.sh og kontrollere, om en fil /etc/rc.local findes eller ikke:
nano test.sh
Tilføj 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
Gem og luk filen, kør derefter scriptet med følgende kommando:
bash test.sh
Du skal se følgende output:
The file "/etc/rc.local" exists.
Lad os nu oprette en filtest.sh og teste om filen / etc / rc.localad findes ikke:
nano test.sh
Tilføj 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
Gem og luk filen, kør derefter scriptet med følgende kommando:
bash test.sh
Du skal se følgende output:
The file "/etc/rc.localad" is not exists.
Du kan også finde ud af, om der findes en fil eller ej, og udføre en handling på den i bash-script.
Find for eksempel en fil med navnet / etc / hosts, og kopier den til / opt-biblioteket, hvis filen findes.
For at gøre det skal du oprette en fil med navnet test.sh:
nano test.sh
Tilføj følgende linjer:
FILE=/etc/hosts
if ; then
cp $FILE /opt
fi
Gem og luk filen, kør derefter scriptet ved hjælp af følgende kommando:
Test nu / opt-biblioteket med følgende kommando:
ls /opt/hosts
Du skal se værtsfilen i følgende output:
/opt/hosts
Du kan også bruge udtrykket! for at kontrollere, om filen ikke findes.
Kør f.eks. følgende kommando for at kontrollere, om filen / etc / hosting ikke findes:
&& echo "File does not exist"
Eller
test ! -f /etc/hosting && echo "File does not exist"
Du skal se følgende output:
File does not exist
Test om katalog findes
Du kan også finde ud af, om der findes en mappe ved hjælp af indstillingen -d.
Kontroller for eksempel, om mappen / etc / apache2 findes eller ikke.
&& echo "Directory is exists"
Eller
test -d /etc/apache2 && echo "Directory is exists"
Du skal se følgende output:
Directory is exists
Du kan også oprette et bash-script med betingede udtryk for at kontrollere, om der findes en mappe.
Opret en fil med navnet test.sh som vist nedenfor:
nano test.sh
Tilføj følgende linjer:
Gem og luk filen, når du er færdig. Giv derefter ordentlig tilladelse med følgende kommando:
chmod 755 test.sh
Test derefter, om mappen / etc / nginx er tilgængelig eller ikke med følgende kommando:
./test.sh /etc/nginx
Du skal se følgende output:
Directory /etc/nginx/ exists.
Test derefter, om mappen / etc / linux er tilgængelig eller ikke med følgende kommando:
./test.sh /etc/linux
Du skal se følgende output:
Directory /etc/linux does not exists
Filtestoperatører i Bash
Følgende filtestoperatører hjælper dig med at kontrollere, om en “fil” findes og har specifikke typer:
- -b
FILE eksisterer og er blokspecial - -c
FILE eksisterer og er karakterspecifik - -d
FIL findes og er en bibliotek - -e
FIL findes - -f
FILE findes og er en almindelig fil - -g
FILE findes og er set-group-ID - -G
FIL ex ists og ejes af den effektive gruppe-ID - -h
FILE eksisterer og er et symbolsk link (samme som -L) - -k
FILE eksisterer og har dens klæbende bit sæt - -L
FIL eksisterer og er et symbolsk link (samme som -h) - -O
FIL findes og ejes af den effektive bruger ID - -p
FILE eksisterer og er et navngivet rør - -r
FILE eksisterer, og læsetilladelse gives - -s
FIL findes og har en størrelse større end nul - -S
FILE findes og er en sokkel - -u
FILE findes og dens sæt-bruger-ID-bit er indstillet - -w
FILE eksisterer og skrivetilladelse gives - -x
FILE eksisterer og eksekvering (eller søgning) tilladelse gives