Hjem » Siste artikler » If-setninger i Bash: slik automatiserer du små oppgaver i terminalen

If-setninger i Bash: slik automatiserer du små oppgaver i terminalen

Hovedillustrasjon
Hovedillustrasjon. Foto: Markus Winkler / Pexels.

Mange enkle automatiseringsjobber kan løses rett i terminalen, uten tunge verktøy eller store prosjekter. Et lite shell-skript med noen få betingelser kan spare deg for overraskende mye manuelt arbeid.

I denne artikkelen ser vi på hvordan du bruker if-setninger i Bash for å ta valg i skriptene dine. Målet er at du tryggere kan lage små, nyttige skript som faktisk hjelper deg i hverdagen.

Hva er Bash, og hvorfor bry seg om if-setninger?

Bash er standard kommandotolk på mange Linux-distribusjoner og på macOS. Når du åpner terminalen og skriver kommandoer, er det ofte Bash som tolker det du skriver.

Et shell-skript er egentlig bare en tekstfil med kommandoer som kjøres fra topp til bunn. Med if-setninger kan skriptet ta valg: gjøre noe hvis en fil finnes, hvis en kommando lykkes, eller hvis brukeren angir et bestemt argument.

Grunnstrukturen i en if-setning i Bash

Den enkleste if-strukturen i Bash ser slik ut:

Eksempel:

if [ betingelse ]; then
kommandoer
fi

Viktige detaljer:

  • Det skal være mellomrom rundt hakeparentesene: [ betingelse ]
  • then må stå på samme linje som if (eller på neste linje med semikolon før)
  • fi markerer slutten på if-blokken

Teste om en fil eller mappe finnes

En typisk oppgave i shell-skript er å sjekke om en fil eller mappe finnes før du gjør noe med den. Bash har egne flagg for dette.

Eksempel: sjekke om en fil finnes

#!/usr/bin/env bash

FIL="konfig.json"

if [ -f "$FIL" ]; then
echo "Fant filen $FIL"
else
echo "Filen $FIL finnes ikke"
fi

Her betyr:

  • -f: filen finnes og er en vanlig fil
  • -d: finnes og er en mappe
  • -e: finnes (uansett type)

Sammenligne tall og tekst i Bash

Når du vil sammenligne tall, bruker du egne operatorer. De vanlige > og < inne i hakeparenteser tolkes som fil-omdirigering, ikke som tall-sammenligning.

Eksempel: tall-sammenligning

ALDER=20

if [ "$ALDER" -ge 18 ]; then
echo "Voksen nok"
else
echo "Ikke gammel nok"
fi

Nyttige operatorer for tall:

  • -eq lik
  • -ne ulik
  • -gt større enn
  • -ge større enn eller lik
  • -lt mindre enn
  • -le mindre enn eller lik

Bruke if med tekst og tomme variabler

For tekst bruker du vanligvis = eller != inne i hakeparentesene. Pass på å alltid sette variabler i anførselstegn, slik at mellomrom og tomme verdier ikke ødelegger skriptet.

Eksempel: sjekke argument

MODUS="$1"

if [ "$MODUS" = "prod" ]; then
echo "Kjører i produksjonsmodus"
else
echo "Kjører i testmodus"
fi

Her er $1 første argument til skriptet. Hvis brukeren ikke gir noe argument, blir "$MODUS" en tom streng, men if-setningen vil fortsatt fungere fordi vi har anførselstegn rundt.

Kombinere betingelser: og / eller

Tematisk illustrasjon
Tematisk illustrasjon. Foto: Jakub Zerdzicki / Pexels.

Ofte vil du sjekke flere ting samtidig, for eksempel at en fil finnes og at en variabel har en bestemt verdi. I moderne Bash kan du bruke [[ ... ]] med logiske operatorer.

Eksempel: kombinere betingelser

FIL="data.csv"
MODUS="$1"

if [[ -f "$FIL" && "$MODUS" = "import" ]]; then
echo "Klar til import"
else
echo "Kan ikke importere nå"
fi

Her betyr:

  • &&: og (begge betingelser må være sanne)
  • ||: eller (minst én betingelse må være sann)

If med exit codes: la kommandoer styre flyten

Nesten alle kommandoer i terminalen avslutter med en statuskode. 0 betyr vanligvis suksess, andre tall betyr en form for feil. Bash-variabelen $? inneholder exit-koden fra siste kommando.

Eksempel: stoppe skript ved feil

cp input.txt backup.txt

if [ $? -ne 0 ]; then
echo "Klarte ikke å ta backup, avbryter."
exit 1
fi

echo "Backup ok, fortsetter..."

Ofte kan du skrive dette enklere ved å sjekke kommandoen direkte:

if cp input.txt backup.txt; then
echo "Backup ok"
else
echo "Backup feilet"
fi

Et lite, men nyttig skript fra start til slutt

La oss sette sammen et enkelt skript som:

  • sjekker at det finnes en gitt mappe
  • tar en komprimert backup hvis alt ser greit ut
  • gir tydelige feilmeldinger underveis

Eksempel: backup av mappe

#!/usr/bin/env bash

KILDE="$1"
DEST="backup.tar.gz"

if [ -z "$KILDE" ]; then
echo "Bruk: $0 /sti/til/mappe"
exit 1
fi

if [ ! -d "$KILDE" ]; then
echo "Mappen $KILDE finnes ikke"
exit 1
fi

echo "Tar backup av $KILDE til $DEST..."
if tar -czf "$DEST" "$KILDE"; then
echo "Backup fullført."
else
echo "Backup feilet."
exit 1
fi

Vanlige feil og hvordan du unngår dem

Det er noen klassiske feller i Bash som skaper mye frustrasjon, spesielt rundt if-setninger. Heldigvis kan de unngås med noen enkle vaner.

Nøkkelråd:

  • ha alltid mellomrom rundt hakeparenteser ([ og ])
  • sett variabler i anførselstegn, for eksempel "$FIL"
  • bruk [[ ... ]] når du kombinerer flere betingelser
  • test skriptet med ulike inputverdier før du stoler på det

Veien videre: hva du kan utforske etter if-setninger

Når du behersker if-setninger, blir det lettere å forstå andre kontrollstrukturer i Bash som for, case og funksjoner. Disse lar deg lage mer robuste og gjenbrukbare skript.

Start gjerne med små oppgaver du faktisk trenger: rydde opp i nedlastinger, ta en enkel backup, eller sjekke status på en tjeneste. Små, konkrete skript gir rask mestringsfølelse og gjør det lettere å lære mer stegvis.

0 kommentarer