Aus IT074-Wiki
Ermittlung durch Array
#!/bin/bash
# Füllt den 'array' von 2 (v=2) bis zum übergebenem Wert ($1)
# Hier werden gleichzeitig die Werte für 'k' und 'v' inkrementiert, das Komma dient dabei als Trenner.
for ((k=0,v=2; v <= $1 ; k++, v++)); do
array[$k]=$v
done
# Da die Keys (k) mit Null beginnen, ist der Zähler 'i' zunächst auch Null
i=0
# Iteriert über den 'array'
# Das Konstrukt ${#...[*]} gibt dabei die Anzahl der Elemente eines Arrays aus.
while [ "$i" -le "${#array[*]}" ]; do
# Werte auslesen.
v=${array[$i]}
# Das Quadrat (**2) von 'v' berechnen und in Variable 'v2' speichern.
let "v2 = $v**2"
# Abbruch, wenn 'v2' größer (-gt) als der eingegebene Wert ist.
if [ "$v2" -gt "$1" ]; then break; fi
j=0
# Iteriert nochmals über den 'array'.
while [ "$j" -lt "${#array[*]}" ]; do
va=${array[$j]}
# Berechne Modulo von 'va' und 'v' und schreibe das Ergebnis in die Variable 'mod'.
let "mod = $va % $v"
if [ "$va" -gt "$v" ]; then
if [ $mod == 0 ]; then
# Löscht die Werte aus dem 'array'.
unset array[$j]
# Füllt den (neuen) array mit dem übriggebliebenen Werten des (alten) arrays
array=( ${array[*]} )
fi
fi
let "j += 1"
done
# Wir sind durch, also wird nun 'i' um den Wert 1 inkrementiert.
let "i += 1"
done
# Gibt die gefundenen Primzahlen aus, also alle die Werte, die noch im 'array' sind.
echo ${array[*]}
Siehe auch