Slik sjekker du riktig om filen finnes i Bash eller Shell (med eksempler)
Innholdsfortegnelse
I denne opplæringen vil jeg dekke forskjellige attributter du kan bruke i bash- eller shell-skripting for å sjekke mot filer og kataloger. Du kan bruke bash-betingede uttrykk med ]
eller bruke test med for å sjekke om filen eksisterer.
Vi vil bruker bash if and else-operatør for alle eksemplene, så jeg vil anbefale deg å lese: Bash if else bruksanvisning for absolutte nybegynnere
1. Bash / Shell: Sjekk om filen eksisterer og er en vanlig fil
Denne delen viser eksemplene for å sjekke om vanlig fil eksisterer i bash.
1.1: Metode-1: Bruk av enkle eller doble parenteser
Bruk av doble parenteser ]
#!/bin/bashFILE="/etc/passwd"if ];then echo "$FILE exists"else echo "$FILE doesn"t exist"fi
Bruk av enkelt parentes
#!/bin/bashFILE="/etc/passwd"if ;then echo "$FILE exists"else echo "$FILE doesn"t exist"fi
1.2: Metode-2: Bruk testkommando
test
kommando brukes til å sjekke filtyper og sammenligne verdier.
#!/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 bruke enkle eller doble parenteser her i dette eksemplet. Jeg vil alltid anbefale å bruke doble parenteser når du skriver en linjekode i skall, da det minimerer risikoen for å få advarsler på konsollen når ordoppdeling skjer.
#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists" || echo "$FILE missing"
Uttalelsen etter &&
vil bli utført hvis SUCCESS. Hvis den første betingelsen returnerer FALSE, vil setning med ||
kjøres.
På samme måte bruker testkommando for å sjekke om vanlig fil eksisterer i bash- eller shell-skript på en linje .
#!/bin/bashFILE="/etc/passwd"test -f $FILE && echo "$FILE exists" || echo "$FILE missing"
2. Bash / Shell: Kontroller om filen eksisterer (er tom eller ikke tom)
For å sjekke om filen eksisterer og hvis den er tom eller hvis den har noe innhold, bruker vi «-s
» -attributtet
2.1: Metode-1: Bruk av enkle eller doble parenteser
Sjekk om filen eksisterer og er tom eller ikke tom ved hjelp av doble 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 eksisterer og er tom eller ikke tom ved bruk av doble parenteser
if ; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi
2.2: Metode-2: Ved hjelp av testkommando
Ved hjelp av testkommando kombinerer vi -s
attributt for å sjekke om filen eksisterer og er tom eller har noe innhold:
2.3: Metode-3: Enkelt linje
Vi kan bruke begge doble eller enkle parenteser for en slik innføring, men som jeg sa tidligere vil jeg anbefale å bruke doble 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åte som testkommandoen kan vi bruke &&
og ||
operatør for å sjekke filen i en linjekommando inne i skallskriptet vårt.
#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"
3. Bash / Shell: Sjekk om katalogen eksisterer
Jeg håper du vet at alt i Linux er en fil. Så på den måten anses en katalog også å være en fil. Vi kan bruke attributtet «-d
» for å sjekke om det finnes en katalog i skallprogrammering.
3.1: Metode-1: Bruk av doble eller enkle parenteser
Vi kan bruke -d
attributt innen enkelt eller doble parentes
]
hvis katalog eksisterer.
#!/bin/bashDIR="/var/log"if ]; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
På samme måte bruker vi enkelt parenteser i dette eksemplet for å sjekke om katalogen er forhåndsinnstilt i skallskriptet.
#!/bin/bashDIR="/var/log"if ; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
3.2: Metode-2: Bruke testkommando
I dette eksemplet vil vi bruke testkommando for å sikre oss om katalogen er tilstede eller ikke før vi utfører en viss oppgave.
#!/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 eksemplet vil vi bruke enkle og doble parenteser i en linjeform for å sjekke for katalogen. Uttalelsen etter &&
operatør vil bli utført hvis den første betingelsen er SANT, og hvis den er FALSK, vil ||
betingelsen «s uttalelse bli utført .
#!/bin/bashDIR="/var/log"] && echo "$DIR exists" || echo "$DIR doesn"t exist"
Jeg vil anbefale å bruke ]
i stedet for for slike linjekoder i skallprogrammering.
Tilsvarende med &&
og ||
kan vi bruke testkommando for å sjekke hvis katalogen finnes
#!/bin/bashDIR="/var/log"test -d $DIR && echo "$DIR exists" || echo "$DIR doesn"t exist"
4. Bash / Shell: Sjekk om katalogen eksisterer (tom eller ikke tom)
Det er ingen skallattributter som jeg har brukt i alle andre eksempler og scenarier i denne opplæringen, men vi har noen hacks som vi kan bruke til å sjekke om katalogen er tom eller ikke tom.
4.1: Metode-1: Liste kataloginnholdet og bekreft
I dette eksemplet vil vi liste innholdet i katalogen, undertrykke utdataene og deretter kontrollere om katalogen er tom eller inneholder noe basert på utgangskoden innhold
#!/bin/bashDIR="/tmp"if ls -1qA $DIR | grep -q . ; then echo "$DIR is not -empty"else echo "$DIR is empty"fi
Vi kan også reversere dette ved å sette en IKKE (!
) -tilstand. Så det ville se ut som:
#!/bin/bashDIR="/tmp"if ! ls -1qA $DIR | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi
Utgangen ville være den samme i begge eksemplene på skriptene.
4.2: Metode-2: Bruk finn kommando
Vi kan bruke finn kommando og deretter undertrykke utdata for å sjekke om målkatalogen har noe innhold eller ikke.
#!/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 innholdet
Igjen som jeg sa, siden det ikke er noen enkel måte å sjekke om en katalog er tom eller ikke bruker noen attributter, vil vi liste innholdet i katalogen. Hvis du ikke får utdata, er katalogen tom 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 det mange flere attributter som du kan bruke med skallskript for å se etter forskjellige filtyper, for eksempel symbolske lenker, filtillatelser osv.
Attributter | Hva det gjør? |
---|---|
-a FILE |
Sant hvis FILE eksisterer |
-b FILE |
Sant hvis FILE eksisterer og er en blokkeringsfil. |
-c FILE |
Sant hvis FILE eksisterer og er en spesiell tegnfil. |
-d FILE |
Sant hvis FILE eksisterer og er en katalog. |
Sant hvis FILE eksisterer |
|
-f FILE |
Sant hvis FILE eksisterer og er en vanlig fil |
-g FILE |
Sant hvis FILE eksisterer og set-group-id-biten er satt |
-h FILE |
Sant hvis FILE eksisterer og er en symbolsk lenke |
-k FILE |
Sant hvis FILE eksisterer og den «klissete» biten er satt |
-p FILE |
Sant hvis FILE eksisterer og er en kalt pipe (FIFO) |
-r FILE |
Sant hvis FILE eksisterer og kan leses |
-s FILE |
Sant hvis FILE eksisterer og har en størrelse større enn null |
-u FILE |
Sant hvis FILE eksisterer og set-user-id bit er angitt |
-w FILE |
Sann hvis FILE eksisterer og er skrivbar |
-x FILE |
Sant hvis FILE eksisterer og kan kjøres |
-G FILE |
Sant hvis FILE eksisterer og eies av den effektive gruppe-id |
-L FILE |
Sant hvis FILE eksisterer og er en symbolsk lenke |
-N FILE |
Sant hvis FILE eksisterer og er endret siden sist det ble lest |
-o FILE |
Sant hvis FILE eksisterer og eies av den effektive bruker-ID |
-S FILE |
Sant hvis FILE og er en stikkontakt |
|
Sant hvis FILE1 og FILE2 refererer til samme enhet og inode nummer |
FILE1 -nt FILE2 |
Sant hvis FILE1 er nyere (i henhold til modifikasjonsdato) enn FILE2 , eller hvis FILE1 eksisterer og FILE2 ikke |
FILE1 -ot FILE2 |
Sant hvis FILE1 er eldre enn FILE2 , eller hvis FILE2 eksisterer og FILE1 ikke |