- ベストアンサー
同じコマンドを何回も実行したいです。シェルスクリプト
c/c++で質問させていただきましたが カテゴリ違いのため移動させていただきました。 for i in `seq 100` do /home/simu/simu.exe sleep 120 done 例えば/home/simu/simu.exeを 100回、120秒間隔で実行したいときには 上記コマンドをシェルに入力すればよいでしょうか? bashに入力してみましたが、seq:command not foundになってしまいます。 どうしたらよいでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
declare -i i=0 while [ $i -lt 10 ] ; do コマンド i=i+1 done
その他の回答 (3)
- mac_res
- ベストアンサー率36% (568/1571)
>コマンドの実行時間が考慮されていないのでループ処理では難しいでしょう。 私も同意見です。コマンドの実行時間が累積されますから。やはりCで書いてしまったほうが良いのではないでしょうか? -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> char *prog; int main(void) { char comnand[BUFSIZ], buf[BUFSIZ]; int num, interval, i; time_t next, diff; printf("実行するコマンドを入力してください。\n >> "); fgets(comnand, BUFSIZ, stdin); printf("実行する回数を入力してください。 >> "); fgets(buf, BUFSIZ, stdin); num = atoi(buf); printf("実行する間隔(秒)を入力してください。 >> "); fgets(buf, BUFSIZ, stdin); interval = atoi(buf); printf("Command: %s", comnand); printf("回数: %d回, 間隔: %d秒\n", num, interval); printf("実行しますか? (Y/n) >> "); fgets(buf, BUFSIZ, stdin); if (buf[0] == 'n') { return 0; } next = time(NULL); for (i = 0; i < num; i++) { next += interval; system(comnand); if ((diff = next - time(NULL)) > 0) { sleep(diff); } } return 0; }
- yambejp
- ベストアンサー率51% (3827/7415)
蛇足になりますが・・・ 120秒間隔という言葉が気になります。 最初の作業から200分後に最後の処理まで行く というコマンドに依存しない処理をしたいなら コマンドの実行時間が考慮されていないので ループ処理では難しいでしょう。atとか?
- notnot
- ベストアンサー率47% (4900/10358)
元回答者です。 最近linuxを使うことが多いので、unixにあるかどうか確認せずにseqと書いてしまいました。 seq 100 は 1 から 100 までの数字を順に出力するコマンドです。要は何でもいいから100個の並びが欲しいわけです。seqがない場合は、 for i in `yes | head -100` do /home/sumu/simu.exe sleep 120 done yes は y を出力し続けるコマンド、head -100 はその先頭100行だけ取り出すコマンドです。結果、y が 100個並びます。 for i in i a a a … と自分で何かを100個書き並べてもいいです。 #1の方のように、繰り返しの回数を +1 しながら数えるやり方でもいいです。10万回とかだとそちらのほうがいいでしょうね。なお、#1の方の回答はbash限定なので、ファイルにして実行するときは、「sh ファイル名」ではなく、「bash ファイル名」で実行してください。linuxだとshもbashも同じですが、unixだと違うと思います。