iocalhost.nl // no place like ::1
references Editors & Shell bash scripting

bash scripting

Variabelen, condities, loops, functies en veelgebruikte idiomen.

Script-basis

#!/usr/bin/env bash
set -euo pipefail   # stop bij fouten, ongezette vars, pipe-fouten
IFS=$'\n\t'

set -e stopt bij een fout, -u faalt op ongedefinieerde variabelen, -o pipefail laat een pipe falen als één onderdeel faalt.

Variabelen

naam="wereld"
echo "hallo ${naam}"
readonly PI=3.14
export PATH="$PATH:/opt/bin"
n=${1:-default}        # eerste argument, of "default"
len=${#naam}           # lengte
sub=${naam:0:3}        # substring

Condities

if [[ -f bestand ]]; then echo "bestaat"; fi

# -f bestand   -d map      -z leeg     -n niet-leeg
# -eq -ne -lt -gt   numeriek
# ==  !=  =~        string / regex
[[ "$x" == a* ]] && echo "begint met a"

Loops

for f in *.txt; do echo "$f"; done
for i in {1..5}; do echo "$i"; done
while read -r line; do echo "$line"; done < bestand
until [[ $n -ge 3 ]]; do ((n++)); done

Functies

greet() {
  local naam="$1"
  echo "hallo $naam"
  return 0
}
greet "iocalhost"

Handige idiomen

out=$(date +%F)              # command substitution
files=( *.log )              # array
echo "${files[@]}"           # alle elementen
cmd && echo ok || echo fout  # voorwaardelijk
[[ -z "${VAR:-}" ]] && VAR=fallback
trap 'rm -f "$tmp"' EXIT      # opruimen bij exit