Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 为什么赢了';我的shell脚本不能工作吗?_Bash_Shell - Fatal编程技术网

Bash 为什么赢了';我的shell脚本不能工作吗?

Bash 为什么赢了';我的shell脚本不能工作吗?,bash,shell,Bash,Shell,我正在使用bash,这是我的代码 for i in $(seq 20) do if [ $i % 3 == 0 ] then echo HI else echo $i fi done 因此,输出应为: 1. 2. 你好 4. 5. 你好 ... 等等 但是当我运行shell时,我一直会遇到这个错误。 script.sh 4:[:1:意外运算符 1. 然后就这样一直持续到20岁。 我尝试了不同的方法,但

我正在使用bash,这是我的代码

for i in $(seq 20)
do 
     if [ $i % 3 == 0 ]
     then 
            echo HI
     else 
            echo $i
     fi
done
因此,输出应为: 1. 2. 你好 4. 5. 你好 ... 等等 但是当我运行shell时,我一直会遇到这个错误。 script.sh 4:[:1:意外运算符 1. 然后就这样一直持续到20岁。
我尝试了不同的方法,但无法使其工作。

您需要将包含
if
的行更改为:

 if [[ $((i%3)) == 0 ]]

这样就行了。

您需要将包含
if
的行更改为:

 if [[ $((i%3)) == 0 ]]
那就行了。

用这个

for i in {1..20}
do 
     if [ `expr $i % 3` == 0 ]
     then 
            echo HI
     else 
            echo $i
     fi
done
用这个

for i in {1..20}
do 
     if [ `expr $i % 3` == 0 ]
     then 
            echo HI
     else 
            echo $i
     fi
done

它应该像下面提到的格式一样

如果[$i%3==0]; 然后


但如果引入“==”符号,它只会产生从1到20的增量值。

它应该像下面提到的格式一样

如果[$i%3==0]; 然后

但如果引入“==”符号,它只会产生从1到20的增量值。

甚至更简单一点:

if ((i%3 == 0)) # No '$' needed
then
    ....
更简单一点:

if ((i%3 == 0)) # No '$' needed
then
    ....


通过“script.sh:4:script.sh:[[:找不到1”,然后一直到“script.sh:4:fizzbuzz.sh:[[:找不到20”,我仍然将此作为输出@马特·多伊:你说你在使用Bash,但是你是如何运行
script.sh
?它是作为
sh script.sh
?或者你在shebang行中有什么-它是
!/bin/sh
还是
!/bin/Bash
?我怀疑你使用的是
sh
,而不是
Bash
-这就是为什么这行不通的原因。我该如何使用bash.我一直在使用sh script.sh,并且在脚本的顶部使用了#!/bin/bash。顺便说一句,这是我的第一个脚本。天哪,我觉得太愚蠢了。当我不得不以bash script.sh运行它时,我是以sh script.sh运行它的。然后我得到了正确的输出。谢谢您对它进行了如此多的测试,它可以按照您的预期工作,请您再次检查它,注意sp的位置ace characterI仍然通过“script.sh:4:script.sh:[[:找不到1”,然后一直到“script.sh:4:fizzbuzz.sh:[[:找不到20”,将此作为输出@马特·多伊:你说你在使用Bash,但是你是如何运行
script.sh
?它是作为
sh script.sh
?或者你在shebang行中有什么-它是
!/bin/sh
还是
!/bin/Bash
?我怀疑你使用的是
sh
,而不是
Bash
-这就是为什么这行不通的原因。我该如何使用bash.我一直在使用sh script.sh,并且在脚本的顶部使用了#!/bin/bash。顺便说一句,这是我的第一个脚本。天哪,我觉得太愚蠢了。当我不得不以bash script.sh运行它时,我是以sh script.sh运行它的。然后我得到了正确的输出。谢谢您对它进行了如此多的测试,它可以按照您的预期工作,请您再次检查它,注意sp的位置ace字符如果我使用if[[$((i%3))==0]]它只使用[[:它说我在使用bash,在脚本的开头我确实有!!/bin/bash你确定你在使用bash吗?如果是,哪个版本?(
sh--version
bash--version
)。我怀疑你使用的不是Bash-也许
/bin/sh
实际上是
破折号
?当你运行脚本时,你是运行
sh script.sh
还是
Bash script.sh
/script.sh
还是其他什么?文件顶部是否有空行或类似的奇怪内容?是的h我不是作为bash运行的。我知道了如果我使用if[[$((i%3))==0]],它只使用一个[[:它说我在使用bash,在脚本开始时我有!!/bin/bash你确定你在使用bash吗?如果是,是哪个版本?(
sh--version
bash--version
)。我怀疑你使用的不是Bash-也许
/bin/sh
实际上是
破折号
?当你运行脚本时,你是运行
sh script.sh
还是
Bash script.sh
/script.sh
还是其他什么?文件顶部是否有空行或类似的奇怪内容?是的h我不是作为bash运行的。我想起来了,谢谢你也可以使用
-eq
而不是
==
,这其中唯一可能引起麻烦的是
=
而不是
=
,但是如果你运行bash,它应该可以正常工作。使用
expr
是一个很重要的解决方案,但不是无效的。我更愿意看到<代码>$(expr$i%3)。当然,您必须小心使用所有空格。您也可以使用
-eq
而不是
=
。这其中唯一可能导致问题的是
=
而不是
=
,但是如果您正在运行Bash,它应该可以正常工作。使用
expr
是一个重要的解决方案,但并非无效。我也希望看到
$(expr$I%3)
。当然,您必须小心使用所有空格。