Diese beiden Skripte berechnen die Größen für Schwarzpulverladungen einmal für Kurzwaffen (Kw) und einmal für Langwaffen (Lw). In diesem Beispiel hier werden die Kalibergrößen, die es zur Berechnung braucht, innerhalb des Skripts durch ein Array bereitgestellt.
Kw
Lw
#!/bin/bash
export LC_NUMERIC=C
# Liste der Kaliber im Array
kaliber_liste=("0.31" "0.32" "0.36" "0.40" "0.41" "0.44" "0.45" "0.47" "0.50" "0.52" "0.54" "0.58" "0.62" "0.69")
# Funktion zur Berechnung und Ausgabe
berechne_ladungen() {
local kaliber_zoll="$1"
local kaliber_cm
local min max mittel
kaliber_cm=$(echo "$kaliber_zoll * 25.4" | bc -l)
min=$(echo "($kaliber_cm * 0.1) * 15.4" | bc -l)
max=$(echo "$min + 6.1" | bc -l)
mittel=$(echo "($min + $max) / 2" | bc -l)
LC_NUMERIC=C printf "%-10s | Min: %6.2f | Mittel: %6.2f | Max: %6.2f\n" \
"$kaliber_zoll" "$min" "$mittel" "$max"
}
echo ""
echo "Übersicht der Ladungsgrößen für Schwarzpulver-Kurzwaffen"
echo "============================"
echo "Kaliber | Ladungen (in Grain)"
echo "-------------------------------------------"
for k in "${kaliber_liste[@]}"; do
berechne_ladungen "$k"
done
echo ""
#!/bin/bash
export LC_NUMERIC=C
# Liste der Kaliber im Array
kaliber_liste=("0.32" "0.36" "0.38" "0.40" "0.41" "0.42" "0.45" "0.48" "0.50" "0.52" "0.54" "0.58" "0.62" "0.69" "0.72" "0.75")
# Funktion zur Berechnung und Ausgabe
berechne_ladungen() {
local kaliber_zoll="$1"
local kaliber_cm
local min max mittel
kaliber_cm=$(echo "$kaliber_zoll * 25.4" | bc -l)
min=$(echo "($kaliber_cm * 0.25) * 15.4" | bc -l)
max=$(echo "$min + 9.2" | bc -l)
mittel=$(echo "($min + $max) / 2" | bc -l)
LC_NUMERIC=C printf "%-10s | Min: %6.2f | Mittel: %6.2f | Max: %6.2f\n" \
"$kaliber_zoll" "$min" "$mittel" "$max"
}
echo ""
echo "Übersicht der Ladungsgrößen für Schwarzpulver-Langwaffen"
echo "============================"
echo "Kaliber | Ladungen (in Grain)"
echo "-------------------------------------------"
for k in "${kaliber_liste[@]}"; do
berechne_ladungen "$k"
done
echo ""
In diesem Beispiel sind die selben Skripte wie oben, aber anstelle eines Arrays lesen diese Skripte jeweils die Werte aus einer separaten Datei aus.
Kw
Lw
#!/bin/bash
export LC_NUMERIC=C
kaliber_datei="kaliber_kw.txt"
if [[ ! -f "$kaliber_datei" ]]; then
echo "Fehler: Datei '$kaliber_datei' nicht gefunden."
exit 1
fi
berechne_ladungen() {
local kaliber_zoll="$1"
local kaliber_cm
local min max mittel
kaliber_cm=$(echo "$kaliber_zoll * 25.4" | bc -l)
min=$(echo "($kaliber_cm * 0.1) * 15.4" | bc -l)
max=$(echo "$min + 6.1" | bc -l)
mittel=$(echo "($min + $max) / 2" | bc -l)
LC_NUMERIC=C printf "%-10s | Min: %6.2f | Mittel: %6.2f | Max: %6.2f\n" \
"$kaliber_zoll" "$min" "$mittel" "$max"
}
echo ""
echo "Übersicht der Ladungsgrößen für Schwarzpulver-Kurzwaffen"
echo "============================"
echo "Kaliber | Ladungen (in Grain)"
echo "-------------------------------------------"
while IFS= read -r k; do
[[ -z "$k" ]] && continue
berechne_ladungen "$k"
done < "$kaliber_datei"
echo ""
#!/bin/bash
export LC_NUMERIC=C
kaliber_datei="kaliber_lw.txt"
if [[ ! -f "$kaliber_datei" ]]; then
echo "Fehler: Datei '$kaliber_datei' nicht gefunden."
exit 1
fi
berechne_ladungen() {
local kaliber_zoll="$1"
local kaliber_cm
local min max mittel
kaliber_cm=$(echo "$kaliber_zoll * 25.4" | bc -l)
min=$(echo "($kaliber_cm * 0.25) * 15.4" | bc -l)
max=$(echo "$min + 9.2" | bc -l)
mittel=$(echo "($min + $max) / 2" | bc -l)
LC_NUMERIC=C printf "%-10s | Min: %6.2f | Mittel: %6.2f | Max: %6.2f\n" \
"$kaliber_zoll" "$min" "$mittel" "$max"
}
echo ""
echo "Übersicht der Ladungsgrößen für Schwarzpulver-Langwaffen"
echo "============================"
echo "Kaliber | Ladungen (in Grain)"
echo "-------------------------------------------"
while IFS= read -r k; do
[[ -z "$k" ]] && continue
berechne_ladungen "$k"
done < "$kaliber_datei"
echo ""
Hier sind die beiden Kaliber-Dateien (links, die etwas kürzere Liste = Kw; rechts, die etwas längere Liste = Lw).
Kw
Lw
0.31
0.32
0.36
0.40
0.41
0.44
0.45
0.47
0.50
0.52
0.54
0.58
0.62
0.69
0.32
0.36
0.38
0.40
0.41
0.42
0.45
0.48
0.50
0.52
0.54
0.58
0.62
0.69
0.72
0.75
Was stellen wir fest?
Es ist schon etwas mühselig, die Werte in ein Array einzutippen, dabei darauf zu achten, die Anführungszeichen richtig zu setzen und dann natürlich noch, nur da zu schreiben, wo man auch will. Im Gegensatz dazu kann ich die separate Datei mit Kalibergrößen natürlich beliebig verändern, ohne dass das mein Skript beeinflusst. So komme ich insgesamt zu dem Schluss, dass ich in diesem Fall hier mit Variante 2, also ohne Array, arbeiten werde.
Und was kommt am Ende bei raus?
Übersicht der Ladungsgrößen für Schwarzpulver-Kurzwaffen
============================
Kaliber | Ladungen (in Grain)
-------------------------------------------
0.31 | Min: 12.13 | Mittel: 15.18 | Max: 18.23
0.32 | Min: 12.52 | Mittel: 15.57 | Max: 18.62
0.36 | Min: 14.08 | Mittel: 17.13 | Max: 20.18
0.40 | Min: 15.65 | Mittel: 18.70 | Max: 21.75
0.41 | Min: 16.04 | Mittel: 19.09 | Max: 22.14
0.44 | Min: 17.21 | Mittel: 20.26 | Max: 23.31
0.45 | Min: 17.60 | Mittel: 20.65 | Max: 23.70
0.47 | Min: 18.38 | Mittel: 21.43 | Max: 24.48
0.50 | Min: 19.56 | Mittel: 22.61 | Max: 25.66
0.52 | Min: 20.34 | Mittel: 23.39 | Max: 26.44
0.54 | Min: 21.12 | Mittel: 24.17 | Max: 27.22
0.58 | Min: 22.69 | Mittel: 25.74 | Max: 28.79
0.62 | Min: 24.25 | Mittel: 27.30 | Max: 30.35
0.69 | Min: 26.99 | Mittel: 30.04 | Max: 33.09
Übersicht der Ladungsgrößen für Schwarzpulver-Langwaffen
============================
Kaliber | Ladungen (in Grain)
-------------------------------------------
0.32 | Min: 31.29 | Mittel: 35.89 | Max: 40.49
0.36 | Min: 35.20 | Mittel: 39.80 | Max: 44.40
0.38 | Min: 37.16 | Mittel: 41.76 | Max: 46.36
0.40 | Min: 39.12 | Mittel: 43.72 | Max: 48.32
0.41 | Min: 40.09 | Mittel: 44.69 | Max: 49.29
0.42 | Min: 41.07 | Mittel: 45.67 | Max: 50.27
0.45 | Min: 44.01 | Mittel: 48.61 | Max: 53.21
0.48 | Min: 46.94 | Mittel: 51.54 | Max: 56.14
0.50 | Min: 48.90 | Mittel: 53.49 | Max: 58.10
0.52 | Min: 50.85 | Mittel: 55.45 | Max: 60.05
0.54 | Min: 52.81 | Mittel: 57.41 | Max: 62.01
0.58 | Min: 56.72 | Mittel: 61.32 | Max: 65.92
0.62 | Min: 60.63 | Mittel: 65.23 | Max: 69.83
0.69 | Min: 67.48 | Mittel: 72.08 | Max: 76.68
0.72 | Min: 70.41 | Mittel: 75.01 | Max: 79.61
0.75 | Min: 73.34 | Mittel: 77.94 | Max: 82.54