3
#!/bin/sh
INTERVAL=1
COUNT=0
while [ $COUNT -le 9 ]
do
    (( COUNT++ ))
    sleep $INTERVAL
    echo "count is $COUNT"
done

実行時。

$ sh ascript 
ascript: 9: COUNT++: not found
count is 0
ascript: 9: COUNT++: not found
count is 0
ascript: 9: COUNT++: not found
count is 0
ascript: 9: COUNT++: not found
count is 0
ascript: 9: COUNT++: not found
count is 0
ascript: 9: COUNT++: not found
count is 0
ascript: 9: COUNT++: not found
count is 0
ascript: 9: COUNT++: not found
4

7 に答える 7

8

bash固有の操作を使用する場合は、一番上では#!/bin/bashなく、おそらく必要です。#!/bin/sh

あなたのスクリプトは私のMacでうまく機能shしますbash。あなたshが本物の人なら、あなたはそれほど幸運ではないかもしれません。

于 2012-04-09T02:54:32.820 に答える
8

(( ))command の呼び出しを伴う、ネストされたサブシェル (実際にはそのうちの 2 つ) になりますCOUNT++$(( ))算術置換メカニズムが必要です。しかし、それは実際には を置き換えるので、コメントで非表示にするか、置換を含むインクリメントを使用する必要があります。

: $(( COUNT++ )) # : is a shell comment

また

COUNT=$(( $COUNT + 1 ))
于 2012-04-09T02:55:24.470 に答える
3
#!/bin/bash
COUNT=0;
while [ $COUNT -le 9 ] ; 
do sleep 1; 
(( COUNT++ )) ; 
echo $COUNT ; 
done

これは、このスクリプトを作成するためのより良い方法です。そして、次のようにスクリプトを実行することをお勧めします:
./script.sh
または
bash ./script.sh

bash がない場合は、次の方法を使用します。

#!/bin/sh
ENV=1
while [ $ENV -le 10 ]
do
sleep 1
echo $ENV
ENV=`expr $ENV + 1`
done
于 2014-03-05T15:35:55.813 に答える
2

からhelp for:

for ((: for (( exp1; exp2; exp3 )); do COMMANDS; done
    Arithmetic for loop.

    Equivalent to
        (( EXP1 ))
        while (( EXP2 )); do
                COMMANDS
                (( EXP3 ))
        done
    EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is
    omitted, it behaves as if it evaluates to 1.


    Exit Status:
    Returns the status of the last command executed.

を使用して実行することを忘れないでくださいbash

于 2012-04-09T02:56:38.893 に答える
0

これ:(( COUNT++ ))あなたが望むことをしません。

への変更:let "COUNT++"

bash での算術演算の詳細については、http : //tldp.org/LDP/abs/html/ops.htmlを参照してください。

そして、bash を使用するに#!/bin/bashは、#!/bin/sh

于 2012-04-09T02:55:57.110 に答える