Bash
Muuttujat
nimi="arvo"
echo "$nimi"
export POLKU="/usr/local/bin" # vie ympäristöön aliprosesseille
readonly VAKIO="ei muutu"
unset nimi
Parametrilaajennus
echo "${nimi:-oletus}" # käytä "oletus", jos nimi on tyhjä/olematon
echo "${nimi:=oletus}" # sama, mutta myös ASETTAA nimen
echo "${nimi:?virhe}" # keskeytä virheellä, jos tyhjä
echo "${nimi#etu}" # poista lyhin täsmäävä etuliite
echo "${nimi%loppu}" # poista lyhin täsmäävä loppuliite
echo "${nimi//vanha/uusi}" # korvaa kaikki osumat
echo "${#nimi}" # merkkijonon pituus
Taulukot
taulukko=(eka toka kolmas)
echo "${taulukko[0]}" # eka
echo "${taulukko[@]}" # kaikki alkiot
echo "${#taulukko[@]}" # alkioiden lukumäärä
taulukko+=(neljäs) # lisää alkio
for alkio in "${taulukko[@]}"; do
echo "$alkio"
done
Ehtolauseet
if [ -f tiedosto ]; then
echo "on olemassa"
elif [ -d kansio ]; then
echo "on kansio"
else
echo "ei kumpaakaan"
fi
# [[ ]] tukee mm. regexiä ja on turvallisempi lainausmerkkien suhteen
if [[ "$nimi" =~ ^[0-9]+$ ]]; then
echo "pelkkiä numeroita"
fi
case "$nimi" in
alku*) echo "alkaa alulla" ;;
*loppu) echo "päättyy loppuun" ;;
*) echo "muu" ;;
esac
Silmukat
for tiedosto in *.txt; do
echo "$tiedosto"
done
for i in {1..5}; do
echo "$i"
done
while read -r rivi; do
echo "$rivi"
done < tiedosto.txt
until [ "$valmis" = "kylla" ]; do
read -r valmis
done
Putket ja uudelleenohjaukset
diff <(sort a.txt) <(sort b.txt)
cat <<EOF > viesti.txt
Rivi 1
Rivi 2
EOF
Funktiot
tervehdi() {
local nimi="$1" # local rajaa muuttujan funktion sisälle
echo "Hei, $nimi!"
return 0
}
tervehdi "maailma"
Poistumiskoodit ja virheenkäsittely
komento
echo $? # edellisen komennon poistumiskoodi (0 = onnistui)
set -euo pipefail # keskeytä virheeseen, tuntemattomaan muuttujaan
# tai putken sisäiseen virheeseen
trap 'echo "Keskeytetty"; exit 1' INT TERM
Prosessit ja työnhallinta
komento & # aja taustalla
jobs # listaa taustatyöt
fg %1 # tuo työ 1 etualalle
kill %1 # lopeta taustatyö
wait # odota kaikkien taustatöiden valmistumista
Hyödyllisiä pikanäppäimiä
Alias ja skriptin alku
alias ll='ls -la'
#!/usr/bin/env bash
set -euo pipefail