tip mal in der shell "help read" ein dann siehst du das dort die Variablennamen folgen die mit den Zeilen aus
done< <(/usr/local/bin/redis-cli hkeys Coin_Algos)
gefüttert werden. Das
<<()
Konstrukt ist spezifisch für die Bash, wenn du das Script mit "sh script" aufrufst läuft das vor die Wand weil sich dann das gleiche Shell Binary anders/Kompatibel verhält. Oh da war etwas, da bin ich mir grad nicht sicher. /bin/sh ist hoffnungslos veraltet, da gibt es keine
[[ =~ ]]
regexp Vergleiche, da ist sogar teils noch [ ein Softlink /usr/bin/[ der auf /bin/test zeigt etc.
"while read CoinName"
CoinName is empty...
^^ nein ist es nicht, CoinName ist die Variable die bei jedem while Durchlauf mit der nächsten Zeile aus redis-cli hkeys Coin_Names_"$line" gefüttert. Wenn es leer bleibt, dann kommt aus redis-cli kein Output heraus.
done< <(/usr/local/bin/redis-cli hkeys Coin_Names_"$line")
Shell Scripte debuggen ist ätzend. Versuche dir die Variableninhalte auszugeben,
while read WorkerName
do
echo "DEBUG: WorkerName = $WorkerName"
und dann den ganzen Output in ein file geben, bash script.sh |& tee logfile.txt
Du kannst dir auch Breakpoints basteln, habe dafür so ein ~/bin/breakpoint.sh das macht etwas leicht anderes, davon brauchst du eher den echo press enter; read -r -s -n 1 CHR Teil. Pack dir das in eine function() im gleichen Script, oder bastell dir ein debug.sh mit den functions für Variableninhalte auszugeben und Breakpoints setzen.
#!/bin/sh
#exec quoted
"$@"
res=$? ;# and store error condition
if [ $res -ne 0 ]; then
echo "command FAILED with error"
fi
#wait for user, our purpose
echo -en "\n...press [Enter] to continue"
read -r -s -n 1 CHARACTER ;# read 1 byte
if [ $res -ne 0 ]; then
#exec /usr/bin/false
exit $res ;# hand over error condition value
fi
now="$(date +"%s")"
braucht kein Escaping, der output von /usr/bin/date dürfte kein Element aus IFS enthalten. Solltest aber besser PATH absichern falls da Überaschungen aufwarten.
length=$(echo "$endtime - $starttime" | bc -l)
braucht dann auch keinen Unterprozess /usr/bin/bc forken, die Integerarithmetik kann die Shell selbst,
length=$[$endtime - $starttime]
okay, bei dayslength geht es in die Fliesskommarithmetik mit 3 Nachkommastellen da ist das Konstrukt okay.