Sådan kontrolleres korrekt, om der findes en fil i Bash eller Shell (med eksempler)
Indholdsfortegnelse
I denne vejledning vil jeg dække forskellige attributter, du kan bruge i bash- eller shell-scripting for at kontrollere mod filer og mapper. Du kan bruge bash-betingede udtryk med ]
eller bruge test med for at kontrollere, om filen findes.
Vi vil bruger bash if og ellers operator til alle eksemplerne, så jeg vil anbefale dig at læse: Bash hvis ellers brugsvejledning til absolutte begyndere
1. Bash / Shell: Kontroller, om filen findes og er en almindelig fil
Dette afsnit viser eksemplerne for at kontrollere, om der findes almindelig fil i bash.
1.1: Metode-1: Brug af enkle eller dobbelte parenteser
Brug af dobbelte parenteser ]
#!/bin/bashFILE="/etc/passwd"if ];then echo "$FILE exists"else echo "$FILE doesn"t exist"fi
Brug af enkelt parenteser
#!/bin/bashFILE="/etc/passwd"if ;then echo "$FILE exists"else echo "$FILE doesn"t exist"fi
1.2: Metode-2: Brug af testkommando
test
kommando bruges til at kontrollere filtyper og sammenligne værdier.
#!/bin/bashFILE="/etc/passwd"if test -f $FILE; then echo "$FILE exists"else echo "$FILE missing"fi
1.3: Metode-3: Enkelt linje
Vi kan bruge enkelt- eller dobbelt parentes her i dette eksempel. Jeg vil altid anbefale at bruge dobbelte parenteser, når du skriver en linjekode i skal, da det minimerer risikoen for at få advarsler på konsollen, når ordopdeling finder sted.
#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists" || echo "$FILE missing"
Erklæringen efter &&
udføres, hvis SUCCESS. Hvis den første betingelse returnerer FALSE, udføres udsagn med ||
.
På samme måde bruger testkommandoen til at kontrollere, om der findes en almindelig fil i bash- eller shell-script i en enkelt linje .
#!/bin/bashFILE="/etc/passwd"test -f $FILE && echo "$FILE exists" || echo "$FILE missing"
2. Bash / Shell: Kontroller, om filen findes (er tom eller ikke tom)
For at kontrollere, om filen findes og hvis den er tom, eller hvis den har noget indhold, bruger vi “-s
” -attribut
2.1: Metode-1: Brug af enkle eller dobbelte parenteser
Kontroller, om filen findes og er tom eller ikke tom ved hjælp af dobbelte parenteser ]
#!/bin/bashFILE="/etc/passwd"if ]; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi
Kontroller, om filen findes og tom eller ikke tom ved hjælp af dobbelte parenteser
if ; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi
2.2: Metode-2: Brug af testkommando
Ved hjælp af testkommando kombinerer vi -s
-attribut for at kontrollere, om filen findes og er tom eller har noget indhold:
2.3: Metode-3: Enkelt linje
Vi kan bruge både dobbelte eller enkle parenteser til sådan en liner, men som jeg sagde tidligere, vil jeg anbefale at bruge dobbelte parenteser.
#!/bin/bashFILE="/etc/passwd"test -s $FILE && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"
På samme måde som testkommandoen kan vi bruge &&
og ||
operatør til at kontrollere filen i en enkelt kommando inde i vores shell-script.
#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"
3. Bash / Shell: Kontroller, om biblioteket findes
Jeg håber, du ved, at alt i Linux er en fil. Så på den måde betragtes en mappe også som en fil. Vi kan bruge attributten “-d
” til at kontrollere, om der findes en mappe i shell-programmering.
3.1: Metode-1: Brug af dobbelt eller enkelt parentes
Vi kan bruge -d
attribut inden for en enkelt eller dobbelt parentes
]
for at kontrollere hvis katalog findes.
#!/bin/bashDIR="/var/log"if ]; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
På samme måde bruger vi enkelt parenteser i dette eksempel til at kontrollere, om biblioteket er forudindstillet i shell-script.
#!/bin/bashDIR="/var/log"if ; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
3.2: Metode-2: Brug af testkommando
I dette eksempel bruger vi testkommando til at sikre os, om kataloget er til stede eller ej, før vi udfører en bestemt opgave.
#!/bin/bashDIR="/var/log"if test -d $DIR; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
3.3: Metode-3: Enkelt linje
I dette eksempel vil vi bruge enkelt- og dobbeltbeslag i enkeltlinjeform til at kontrollere til telefonbogen. Erklæringen efter &&
operatør vil blive udført, hvis den første betingelse er SAND, og hvis den er FALSK, vil ||
betingelsen “s udsagn blive udført .
#!/bin/bashDIR="/var/log"] && echo "$DIR exists" || echo "$DIR doesn"t exist"
Jeg vil anbefale at bruge ]
i stedet for for sådan en linjekode i shell-programmering.
På samme måde med &&
og ||
kan vi bruge testkommando til at kontrollere hvis katalog findes
#!/bin/bashDIR="/var/log"test -d $DIR && echo "$DIR exists" || echo "$DIR doesn"t exist"
4. Bash / Shell: Kontroller om katalog findes (tom eller ikke tom)
Der er ingen skalattributter som jeg har brugt i alle andre eksempler og scenarier i denne tutorial. Men vi har nogle hacks, som vi kan bruge til at kontrollere, om biblioteket er tomt eller ikke-tomt.
4.1: Metode-1: Liste over biblioteksindholdet og bekræft
I dette eksempel viser vi indholdet af biblioteket, undertrykker output og kontrollerer derefter baseret på udgangskoden, om mappen er tom eller indeholder noget indhold
#!/bin/bashDIR="/tmp"if ls -1qA $DIR | grep -q . ; then echo "$DIR is not -empty"else echo "$DIR is empty"fi
Vi kan også vende dette ved at sætte en IKKE (!
) -betingelse. Så det ser ud som:
#!/bin/bashDIR="/tmp"if ! ls -1qA $DIR | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi
Outputtet vil være det samme i begge eksempler på scripts.
4.2: Metode-2: Brug find-kommando
Vi kan bruge find-kommandoen og derefter undertrykke output for at kontrollere, om målmappen har noget indhold eller ej.
#!/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: Metode-3: Liste indholdet
Igen, som jeg sagde, da der ikke er nogen nem måde at kontrollere, om et bibliotek er tomt eller ikke bruger nogle attributter, vil vi liste indholdet af biblioteket. Hvis du ikke får noget output, er biblioteket tomt eller ellers ikke tom
#!/bin/bashDIR="/tmp"if ] ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi
5. Bash / Shell: Liste over attributter til testfil
Tilsvarende er der mange flere attributter, som du kan bruge med shell-scripts til at kontrollere forskellige filtyper, såsom symbolske links, filtilladelser osv.
Attributter | Hvad det gør? |
---|---|
-a FILE |
Sand hvis FILE findes |
-b FILE |
Sand hvis FILE findes og er en blokspecifik fil. |
-c FILE |
Sand hvis FILE findes og er en karakterspecifik fil. |
-d FILE |
Sand hvis FILE findes og er en mappe. |
Sand hvis FILE findes |
|
-f FILE |
Sand hvis FILE findes og er en almindelig fil |
-g FILE |
Sand hvis FILE findes, og dens sæt-gruppe-id-bit er indstillet |
-h FILE |
Sand hvis FILE findes og er et symbolsk link |
-k FILE |
Sand hvis FILE findes, og dens “klæbrige” bit er indstillet |
-p FILE |
Sand hvis FILE findes og er en opkaldt rør (FIFO) |
-r FILE |
Sand hvis FILE findes og kan læses |
-s FILE |
Sand hvis FILE findes og har en størrelse større end nul |
-u FILE |
Sand hvis FILE findes, og dens sæt-bruger-id-bit er indstillet |
-w FILE |
Sand hvis FILE findes og kan skrives |
-x FILE |
Sand hvis FILE findes og kan eksekveres |
-G FILE |
Sandt, hvis FILE findes og ejes af det effektive gruppe-id |
-L FILE |
Sand hvis FILE findes og er et symbolsk link |
-N FILE |
Sandt hvis FILE findes og er blevet ændret, siden det sidst blev læst |
-o FILE |
Sandt, hvis FILE findes og ejes af den effektive bruger-id |
-S FILE |
Sand hvis FILE findes og er en stikkontakt |
|
Sand hvis FILE1 og FILE2 henviser til den samme enhed og inode numre |
FILE1 -nt FILE2 |
Sand hvis FILE1 nyere (i henhold til ændringsdatoen) end FILE2 , eller hvis FILE1 findes, og FILE2 ikke |
FILE1 -ot FILE2 |
Sand hvis FILE1 er ældre end FILE2 , eller hvis FILE2 findes, og FILE1 ikke |