2013/11/21

シェルスクリプト総合 その22

((--i)) でiが0になる時、返り値1なんだ。 
iが負の値になる時でも返り値0なのに、0になる時だけ特別なんですね。

へぇー!こうか。

% i=10; while ; echo $i; ((--i)) && sleep 1s ; do; done;
10
9
8
7
6
5
4
3
2
1
27 :名無しさん@お腹いっぱい。:2013/11/20(水) 19:52:35.18
一定時間、何度か繰り返しコマンドを実行したくて、

for i in `seq 1 10`
do
 何かのコマンド
 sleep 1h
done
echo "finished" | write username

といったスクリプトを書いているのですが、このやり方だと
最後にコマンドを実行してから一時間、無駄に sleep してしまいます。
最後の sleep だけ実行しない方法はないでしょうか。

28 :名無しさん@お腹いっぱい。:2013/11/20(水) 19:58:50.00
再編集の時が恐いけど
変数 i<=9 のときにsleep 1h

i/=10の時に sleep 1h

29 :名無しさん@お腹いっぱい。:2013/11/20(水) 20:00:40.20
>>27

i=10
while
 何かのコマンド
 ((--i)) &amp;&amp; sleep 1h
do :; done
echo "finished" | write username

30 :27:2013/11/20(水) 20:07:56.43
おお! 素早い回答、ありがとうございます。
ですが、たびたびすいません。

実際に使っているスクリプトだと、ループの実行回数が不定な場合があるのです。
(行数が特定できないファイルからの読み込みとか)
最後のループでは sleep しない、という手段はあるでしょうか。

31 :27:2013/11/20(水) 20:19:58.58
よく考えたらファイルからの読み込みも終了判定できますね。
何とか工夫すれば、判定できないループってないかも……。
どうもお騒がせしました。

32 :名無しさん@お腹いっぱい。:2013/11/20(水) 23:30:36.92
>>29
((--i)) でiが0になる時、返り値1なんだ。
iが負の値になる時でも返り値0なのに、0になる時だけ特別なんですね。

0 件のコメント:

コメントを投稿