rdmfreqfm.sh
Es entstehen $1 random Frequenzen in einer vordefinierten Range (FM). Es kann auch ein Abstand $2 zwischen den Frequenzen eingegeben werden. Dies eignet sich gut für Frequenzplanlogistik oder Experimente.
HOWTO:
$0 3 5
Ausagabe:
88.1
107.5
97.7
Der Abstand $2 besagt, dass bei Eingabe von "2" bei einer Frequenz von 90.0 MHz NICHT 89.8, 89.9 und 90.1, 90.2 generiert werden darf.
Beispiel:
anzahl="3"
abstand="5"
# BEISPIEL 1
frequenzen=$(bash lib/rdmfreqfm.sh "$anzahl" "$abstand")
# BEISPIEL 2
mapfile -t freqenzen < <(bash inc/gen_frequencies.sh "$anzahl" "$abstand")
for f in "${frequenzen[@]}"; do
echo "Frequenz: $f MHz"
done
Script:
#!/bin/bash
count="$1"
scope="$2"
min="876"
max="1079"
max_attempts="500" # Maximale Anzahl von Versuchen, um eine nicht überlappende Zufallszahl zu finden
if [ -z "$2" ]; then
scope="3"
fi
generated_numbers=()
function is_nearby {
local number=$1
for n in "${generated_numbers[@]}"; do
if (( number >= n - $scope && number <= n + $scope )); then
return 1
fi
done
return 0
}
while [ ${#generated_numbers[@]} -lt $count ]; do
attempts=0
while true; do
if (( attempts >= max_attempts )); then
echo "ERROR"
exit 1
fi
random_number=$(shuf -i ${min}-${max} -n 1)
if is_nearby $random_number; then
generated_numbers+=($random_number)
formatted_number=$(echo "$random_number" | sed 's/\(.*\)\(.\)$/\1.\2/')
echo "$formatted_number"
break
else
(( attempts++ ))
fi
done
attempts=0
done