När du skapar ett bash-skript kan du stöta på en situation där du måste hitta om en fil finns eller inte att utföra några åtgärder med det. Du kan använda testkommandot för att kontrollera om filen finns och vilken typ är den.
I den här självstudien visar vi dig hur du kontrollerar om filen finns i Linux-baserade operativsystem.
Grundläggande syntax för testkommando
Grundsyntaxen för testkommandot för att kontrollera om filen finns som visas nedan:
test -e file
Eller
test -f file
Var:
- -e
Det här alternativet kontrollerar om en fil existerar oavsett typ. - -f
Detta alternativ kontrollerar om en fil existerar endast om FILEN är en vanlig fil.
Du bör se mansidan för testkommandot enligt nedan:
man test
Du bör se följande skärm :
Testa om filen finns med kommandoraden
I det här avsnittet visar vi dig hur man kontrollerar om filen finns med kommandoraden:
Kör följande kommando för att kontrollera om det finns en fil med namnet / etc / fstab (T rue):
test -f /etc/fstab
Kör sedan följande kommando för att ställa in utgångskoden till 0 eller 1, när testet lyckades eller inte.
echo $?
Utgång:
0
Utgången är 0 vilket betyder att filen / etc / fstab existerar.
Du kan också använd följande kommando för att kontrollera om filen finns:
echo $0
Output:
0
Kör sedan följande kommando för att testa om filen / etc / fabab finns ( Falskt).
test -f /etc/fabab
echo $?
Utdata:
1
Utgången är 1 vilket betyder att filen / etc / fabab inte finns.
Du kan också testa om en fil med namnet /etc/rc.local existerar eller inte använder bash villkorlig körning som visas nedan:
test -f /etc/rc.local && echo "Exists" || echo "Not Exists"
Eller
&& echo "Exists" || echo "Not Exists"
Om filen med namnet /etc/rc.local finns bör du se följande utdata:
Exists
Du kan också kontrollera om flera filer finns eller inte med ett enda kommando:
&& echo "both files exist"
Eller
test -f /etc/passwd -a -f /etc/crontab && echo "both files exist"
Du ska se följande utdata:
both files exist
Testa om filen finns i Bash
I det här avsnittet skapar vi ett bash-skript och kontrollerar om en fil finns eller inte, genom att skriva ut ett meddelande.
Låt oss skapa en fil med namnet test.sh och kontrollera om en fil /etc/rc.local existerar eller inte:
nano test.sh
Lägg till följande rader:
#!/bin/bash
FILE=/etc/rc.local
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Spara och stäng filen och kör sedan skriptet med följande kommando:
bash test.sh
Du bör se följande utdata:
The file "/etc/rc.local" exists.
Nu ska vi skapa ett filtest.sh och testa om filen / etc / rc.localad existerar inte:
nano test.sh
Lägg till följande rader:
#!/bin/bash
FILE=/etc/rc.localad
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Spara och stäng filen och kör sedan skriptet med följande kommando:
bash test.sh
Du ska se följande utdata:
The file "/etc/rc.localad" is not exists.
Du kan också hitta om en fil finns eller inte och utföra någon åtgärd på den i bash-skript.
Hitta till exempel en fil med namnet / etc / hosts och kopiera den till / opt-katalogen om filen finns.
Skapa en fil med namnet test.sh:
p> nano test.sh
Lägg till följande rader:
FILE=/etc/hosts
if ; then
cp $FILE /opt
fi
Spara och stäng filen och kör sedan skriptet med följande kommando:
Testa / opt-katalogen med följande kommando:
ls /opt/hosts
Du bör se värdfilen i följande utdata:
/opt/hosts
Du kan också använda uttrycket! för att kontrollera om filen inte finns.
Kör till exempel följande kommando för att kontrollera om filen / etc / hosting inte finns:
&& echo "File does not exist"
Eller
test ! -f /etc/hosting && echo "File does not exist"
Du bör se följande utdata:
File does not exist
Testa om katalogen finns
Du kan också ta reda på om en katalog finns eller inte med alternativet -d.
Kontrollera till exempel om katalogen / etc / apache2 finns eller inte.
&& echo "Directory is exists"
Eller
test -d /etc/apache2 && echo "Directory is exists"
Du bör se följande utdata:
Directory is exists
Du kan också skapa ett bash-skript med villkorliga uttryck för att kontrollera om en katalog finns eller inte.
Skapa en fil med namnet test.sh enligt nedan:
nano test.sh
Lägg till följande rader:
Spara och stäng filen när du är klar. Ge sedan rätt behörighet med följande kommando:
chmod 755 test.sh
Testa sedan om katalogen / etc / nginx är tillgänglig eller inte med följande kommando:
./test.sh /etc/nginx
Du bör se följande utdata:
Directory /etc/nginx/ exists.
Testa sedan om katalogen / etc / linux är tillgänglig eller inte med följande kommando:
./test.sh /etc/linux
Du bör se följande utdata:
Directory /etc/linux does not exists
File Testing Operators in Bash
Följande filtestoperatörer hjälper dig att kontrollera om en ”fil” finns och har specifika typer:
- -b
FIL existerar och är blockspecial - -c
FIL existerar och är karaktärspecifik - -d
FIL existerar och är en katalog - -e
FIL existerar - -f
FIL finns och är en vanlig fil - -g
FIL finns och är set-group-ID - -G
FIL ex ists och ägs av den effektiva grupp-ID - -h
FIL existerar och är en symbolisk länk (samma som -L) - -k
FIL existerar och har dess klibbiga bituppsättning - -L
FIL existerar och är en symbolisk länk (samma som -h) - -O
FIL existerar och ägs av den effektiva användaren ID - -p
FILE existerar och är ett namngivet rör - -r
FILE existerar och läsbehörighet beviljas - -s
FIL existerar och har en storlek större än noll - -S
FIL existerar och är ett uttag - -u
FILE existerar och dess set-user-ID-bit är inställt - -w
FIL existerar och skrivbehörighet beviljas - -x
FIL existerar och exekvering (eller sökningstillstånd beviljas