#!/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
答案 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是一致的。