Hoe correct te controleren of een bestand bestaat in Bash of Shell (met voorbeelden)
Inhoudsopgave
In deze tutorial zal ik verschillende attributen behandelen die je kunt gebruiken in bash- of shell-scripting om te vergelijken met bestanden en mappen. U kunt voorwaardelijke bash-expressies gebruiken met ]
of test met om te controleren of het bestand bestaat.
We zullen gebruik bash if en else operator voor alle voorbeelden, dus ik zou je aanraden om te lezen: Bash if else gebruiksgids voor absolute beginners
1. Bash / Shell: controleer of het bestand bestaat en een normaal bestand is
Deze sectie toont de voorbeelden om te controleren of een gewoon bestand in bash bestaat.
1.1: Methode-1: gebruik van enkele of dubbele haakjes
Gebruik van dubbele haakjes ]
#!/bin/bashFILE="/etc/passwd"if ];then echo "$FILE exists"else echo "$FILE doesn"t exist"fi
Enkele haakjes gebruiken
#!/bin/bashFILE="/etc/passwd"if ;then echo "$FILE exists"else echo "$FILE doesn"t exist"fi
1.2: Method-2: Testopdracht gebruiken
test
-opdracht wordt gebruikt om bestandstypen te controleren en te vergelijken waarden.
#!/bin/bashFILE="/etc/passwd"if test -f $FILE; then echo "$FILE exists"else echo "$FILE missing"fi
1.3: Methode-3: Enkele regel
We kunnen hier enkele of dubbele haakjes gebruiken in dit voorbeeld. Ik zou aanraden om altijd dubbele haakjes te gebruiken wanneer je een liner-code in de shell schrijft, omdat het het risico verkleint dat je waarschuwingen op de console krijgt als er woordsplitsing plaatsvindt.
#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists" || echo "$FILE missing"
De instructie na &&
zal worden uitgevoerd bij SUCCES. Als de eerste voorwaarde FALSE retourneert, wordt de instructie met ||
uitgevoerd.
Op dezelfde manier wordt het testcommando gebruikt om te controleren of een normaal bestand bestaat in bash- of shell-script in een enkele regel .
#!/bin/bashFILE="/etc/passwd"test -f $FILE && echo "$FILE exists" || echo "$FILE missing"
2. Bash / Shell: controleer of het bestand bestaat (is leeg of niet leeg)
Om te controleren of het bestand bestaat en als het leeg is of als het wat inhoud heeft, gebruiken we “-s
” attribuut
2.1: Methode-1: Gebruik enkele of dubbele haakjes
Controleer of het bestand bestaat en leeg of niet leeg is met dubbele haakjes ]
#!/bin/bashFILE="/etc/passwd"if ]; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi
Controleer of bestand bestaat en is leeg of niet leeg met dubbele haakjes
if ; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi
2.2: Method-2: Test commando gebruiken
Met test commando combineren we -s
attribuut om te controleren of bestand bestaat en is leeg of heeft inhoud:
2.3: Methode-3: Enkele regel
We kunnen zowel dubbele als enkele haakjes gebruiken voor zo’n voering, maar zoals ik al eerder zei, zou ik aanraden om dubbele haakjes te gebruiken.
#!/bin/bashFILE="/etc/passwd"test -s $FILE && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"
Op dezelfde manier kunnen we met het testcommando &&
en ||
gebruiken operator om het bestand te controleren in een enkele regel in ons shellscript.
#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"
3. Bash / Shell: controleer of de directory bestaat
Ik hoop dat je weet dat onder Linux alles een bestand is. Op die manier wordt een directory dus ook als een bestand beschouwd. We kunnen het kenmerk “-d
” gebruiken om te controleren of er een directory bestaat in shell-programmering.
3.1: Methode-1: dubbele of enkele haakjes gebruiken
We kunnen het -d
-attribuut binnen enkele of dubbele haakjes
]
gebruiken om te controleren if directory bestaat.
#!/bin/bashDIR="/var/log"if ]; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
Evenzo gebruiken we enkele haakjes in dit voorbeeld om te controleren of de directory vooraf is ingesteld in het shellscript.
#!/bin/bashDIR="/var/log"if ; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
3.2: Methode-2: Testcommando gebruiken
In dit voorbeeld zullen we het testcommando gebruiken om er zeker van te zijn dat er een directory aanwezig is of niet voordat we een bepaalde taak uitvoeren.
#!/bin/bashDIR="/var/log"if test -d $DIR; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
3.3: Methode-3: Enkele regel
In dit voorbeeld gebruiken we enkele en dubbele haakjes in de vorm van een enkele regel om te controleren voor de directory. De instructie na de &&
operator wordt uitgevoerd als de eerste voorwaarde WAAR is en als deze ONWAAR is, wordt de instructie van ||
condition “uitgevoerd .
#!/bin/bashDIR="/var/log"] && echo "$DIR exists" || echo "$DIR doesn"t exist"
Ik zou aanraden ]
te gebruiken in plaats van voor zo’n liner-codes in shell-programmering.
Evenzo kunnen we met &&
en ||
het testcommando gebruiken om te controleren if directory bestaat
#!/bin/bashDIR="/var/log"test -d $DIR && echo "$DIR exists" || echo "$DIR doesn"t exist"
4. Bash / Shell: controleer of de directory bestaat (leeg of niet leeg)
Er zijn geen shell-attributen zoals ik heb gebruikt in alle andere voorbeelden en scenario’s in deze tutorial. Maar we hebben enkele hacks die we kunnen gebruiken om te controleren of de directory leeg is of niet.
4.1: Methode-1: Maak een lijst van de inhoud van de map en verifieer
In dit voorbeeld zullen we de inhoud van de map weergeven, de uitvoer onderdrukken en vervolgens op basis van de afsluitcode controleren of de map leeg is of content
#!/bin/bashDIR="/tmp"if ls -1qA $DIR | grep -q . ; then echo "$DIR is not -empty"else echo "$DIR is empty"fi
We kunnen dit ook omkeren door een NOT (!
) voorwaarde te plaatsen. Dus het zou er als volgt uitzien:
#!/bin/bashDIR="/tmp"if ! ls -1qA $DIR | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi
De uitvoer zou hetzelfde zijn in beide voorbeeldscripts.
4.2: Methode-2: Gebruiken find commando
We kunnen het find commando gebruiken en vervolgens de uitvoer onderdrukken om te controleren of de doelmap inhoud heeft of niet.
#!/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: Methode-3: Maak een lijst van de inhoud
Zoals ik al zei, aangezien er geen gemakkelijke manier is om te controleren of een map leeg is of sommige attributen niet gebruikt, zullen we de inhoud van de map vermelden. Als u geen uitvoer krijgt, is de map leeg of anders niet leeg
#!/bin/bashDIR="/tmp"if ] ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi
5. Bash / Shell: lijst met attributen voor testbestand
Evenzo zijn er veel meer attributen die u kunt gebruiken met shellscripts om te controleren op verschillende bestandstypen, zoals symbolische koppelingen, bestandsrechten enz.
Attributen | Wat doet het? |
---|---|
-a FILE |
Waar als FILE bestaat |
-b FILE |
Waar als FILE bestaat en is een speciaal blokbestand. |
-c FILE |
Waar als FILE bestaat en is een speciaal karakterbestand. |
-d FILE |
Waar als FILE bestaat en is een directory. |
Waar als FILE bestaat |
|
-f FILE |
Waar als FILE bestaat en een normaal bestand is |
-g FILE |
Waar als FILE bestaat en de set-group-id-bit is ingesteld |
-h FILE |
Waar als FILE bestaat en een symbolische link is |
-k FILE |
Waar als FILE bestaat en de “sticky” bit is ingesteld |
-p FILE |
Waar als FILE bestaat en een named pipe (FIFO) |
-r FILE |
Waar als FILE bestaat en is leesbaar |
-s FILE |
Waar als FILE bestaat en heeft een grootte groter dan nul |
-u FILE |
Waar als FILE bestaat en de set-user-id-bit is ingesteld |
-w FILE |
Waar als FILE bestaat en schrijfbaar is |
-x FILE |
Waar als FILE bestaat en uitvoerbaar is |
-G FILE |
Waar als FILE bestaat en eigendom is van de effectieve groeps-ID |
-L FILE |
Waar als FILE bestaat en een symbolische link is |
-N FILE |
Waar als FILE bestaat en is gewijzigd sinds het voor het laatst werd gelezen |
-o FILE |
Waar als FILE bestaat en eigendom is van de effectieve gebruikers-ID |
-S FILE |
Waar als FILE bestaat en is een socket |
|
Waar als FILE1 en FILE2 verwijzen naar hetzelfde apparaat en inode-nummers |
FILE1 -nt FILE2 |
Waar als FILE1 is nieuwer (volgens wijzigingsdatum) dan FILE2 , of als FILE1 bestaat en FILE2 doet niet |
FILE1 -ot FILE2 |
Waar als FILE1 ouder is dan FILE2 , of als FILE2 bestaat en FILE1 niet |