Quiero ejecutar varios trabajos en paralelo usando un script que realiza llamadas en serie a un script parametrizado y lo envía como trabajo en segundo plano en cada llamada. Es para un script de fuerza bruta que en cada llamada ejecutará 1k de 10k combinaciones en total.
El siguiente es mi primer truco.
#!/bin/bash
for i in $(seq 10)
do
./tmp/tmpsky/bd25Par.sh (i*1000-1000) (i*1000) &
done
Quiero $1 para evaluar como 0,1000,2000, etc... y $2 para evaluar como 1000,2000,3000, etc.
El & es para enviar el script como trabajo en segundo plano. El módulo llamado pasará $1 y $2 para usarse con seq de la siguiente manera
#/bin/bash/
for n in $(seq $1 1 $2)
do
...`
El primer guión falla con
unexpected token 'i*1000-1000'
¿Qué he hecho mal?
Respuesta1
El primer guión falla con
unexpected token 'i*1000-1000'
¿Qué he hecho mal?
El error obvio es que en realidad no estás llamando a la variable $i
en tu bucle:
for i in $(seq 10)
do
./tmp/tmpsky/bd25Par.sh (i*1000-1000) (i*1000) &
done
Debería ser:
for i in $(seq 10)
do
./tmp/tmpsky/bd25Par.sh ($i*1000-1000) ($i*1000) &
done
De este modo; utilizar $i
cuando se utiliza la variable. i
por sí solo no funcionará.
En cuanto a hacer cálculos en el shell, consulte el comentario número 2.