Bash Kontrollera om filen existerar – Handledning och kommandon att använda

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

Slutsats

Leave a Reply

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *