ループ関数に数式をパラメータとして渡す

ループ関数に数式をパラメータとして渡す

パラメータ化されたスクリプトをシリアル呼び出しし、各呼び出しでバックグラウンド ジョブとして送信するスクリプトを使用して、複数のジョブを並行して実行したいと考えています。これは、各呼び出しで合計 10,000 の組み合わせのうち 1,000 を実行するブルート フォース スクリプト用です。

以下は私の最初のハックです。

#!/bin/bash
for i in $(seq 10)
do
    ./tmp/tmpsky/bd25Par.sh (i*1000-1000) (i*1000) &
done

$1 を 0、1000、2000 などと評価し、$2 を 1000、2000、3000 などと評価したいです。

& はスクリプトをバックグラウンドジョブとして送信します。呼び出されたモジュールは次のように seq で使用される $1 と $2 を渡します。

#/bin/bash/
for n in $(seq $1 1 $2)
do
...`

最初のスクリプトは失敗します unexpected token 'i*1000-1000'

何を間違えたのでしょうか?

答え1

最初のスクリプトは失敗しますunexpected token 'i*1000-1000'

何を間違えたのでしょうか?

$i明らかなエラーは、ループ内で実際に変数を呼び出さないことです。

for i in $(seq 10)
do
    ./tmp/tmpsky/bd25Par.sh (i*1000-1000) (i*1000) &
done

そのはず:

for i in $(seq 10)
do
    ./tmp/tmpsky/bd25Par.sh ($i*1000-1000) ($i*1000) &
done

したがって、$i変数を使用するときに を使用します。iそれ自体では機能しません。

シェル内での計算に関しては、コメント番号 2 を参照してください。

関連情報