Ich möchte mehrere Jobs parallel ausführen, indem ich ein Skript verwende, das ein parametrisiertes Skript seriell aufruft und es bei jedem Aufruf als Hintergrundjob absendet. Es handelt sich um ein Brute-Force-Skript, das bei jedem Aufruf 1.000 von insgesamt 10.000 Kombinationen ausführt.
Das Folgende ist mein erster Versuch.
#!/bin/bash
for i in $(seq 10)
do
./tmp/tmpsky/bd25Par.sh (i*1000-1000) (i*1000) &
done
Ich möchte, dass 1 $ als 0,1000,2000 usw. und 2 $ als 1000,2000,3000 usw. ausgewertet werden.
Das & dient dazu, das Skript als Hintergrundjob zu senden. Das aufgerufene Modul übergibt $1 und $2, die mit seq wie folgt verwendet werden sollen
#/bin/bash/
for n in $(seq $1 1 $2)
do
...`
Das erste Skript schlägt fehl mit
unexpected token 'i*1000-1000'
Was habe ich falsch gemacht?
Antwort1
Das erste Skript schlägt fehl mit
unexpected token 'i*1000-1000'
Was habe ich falsch gemacht?
$i
Der offensichtliche Fehler besteht darin, dass Sie die Variable in Ihrer Schleife tatsächlich nicht aufrufen :
for i in $(seq 10)
do
./tmp/tmpsky/bd25Par.sh (i*1000-1000) (i*1000) &
done
Es sollte sein:
for i in $(seq 10)
do
./tmp/tmpsky/bd25Par.sh ($i*1000-1000) ($i*1000) &
done
Daher funktioniert die $i
Verwendung der Variable „. an sich“ nicht.i
Informationen zum Ausführen mathematischer Berechnungen in der Shell finden Sie in Kommentar 2.