((COUNT ++)) - >在shell脚本中“COUNT ++:not found”

时间:2012-04-09 02:50:43

标签: shell

#!/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

7 个答案:

答案 0 :(得分:7)

如果您想使用特定于bash的操作,则可能需要#!/bin/bash而不是#!/bin/sh

您的脚本在我的Mac上运行正常,其中sh实际上只是bash。如果您的sh是真实的,那么您可能不会那么幸运。

答案 1 :(得分:7)

(( ))将是一个嵌套的子shell(实际上是其中两个),调用命令COUNT++。你想要$(( ))算术替换机制;但实际上替换,所以你要么想在评论中隐藏它,要么使用涉及替换的增量。

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

COUNT=$(( $COUNT + 1 ))

答案 2 :(得分: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

答案 3 :(得分: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 执行它。

答案 4 :(得分:0)

这:(( COUNT++ ))没有做你想做的事。

更改为:let "COUNT++"

有关bash算术运算的更多信息,请参阅:http://tldp.org/LDP/abs/html/ops.html

并且,要使用bash,请使用#!/bin/bash而不是#!/bin/sh

答案 5 :(得分:0)

我正在给我这个错误只是因为我尝试用sh执行它(例如sh code.sh),但是当我./code.sh它有效时。

答案 6 :(得分:0)

使用<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>graphqlApplication</groupId> <artifactId>graphqlApplication</artifactId> <version>1.0-SNAPSHOT</version> <repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>bintray-andimarek-graphql-java</id> <name>bintray</name> <url>http://dl.bintray.com/andimarek/graphql-java</url> </repository> </repositories> <dependencies> <dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-java</artifactId> <version>3.0.0</version> </dependency> </dependencies> </project> 递增变量以顺序重命名文件时,从#!/bin/sh更改为#!/bin/bash对我来说就像一个梦想。

起始count++的原始脚本在Fedora中工作正常但在我也没有在Kali(Debian)中工作

  

计数++:未找到

简单地将#!/bin/sh替换为#!/bin/sh修复此问题 - 大概是因为Kali / Debian中的默认shell不是bash。这与我在配置使用破折号的Kali时更改默认shell是一致的。