
パラメータ化されたスクリプトをシリアルに呼び出して呼び出すたびに、バックグラウンドジョブとして送信するスクリプトを使用して複数のジョブを並列に実行したいと思います。これは、各呼び出しで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を参照してください。