简单bash脚本;这个语法有什么问题?

简单bash脚本;这个语法有什么问题?,bash,Bash,我正在阅读bash脚本教程,这似乎应该是可行的,但我显然遗漏了一些东西: isframecount=0 framecount=0 while read p; do if ["$isframecount" -eq 0] then echo $p $isframecount = 1 else echo "frame count" echo $p $isframecount = 0 fi done < $filenam 当我尝试

我正在阅读bash脚本教程,这似乎应该是可行的,但我显然遗漏了一些东西:

isframecount=0
framecount=0
while read p; do
  if ["$isframecount" -eq 0]
    then 
    echo $p
    $isframecount = 1
    else
    echo "frame count"
    echo $p
    $isframecount = 0
  fi
done < $filenam

当我尝试运行上述命令时,我发现命令未找到错误;有什么指针吗?

注意那些重要的空格和不应该出现的空格。在这种情况下,if[$isframecount-eq 0]应该是if[$isframecount-eq 0],请参见[和]之前的空格

这样做的原因是,[实际上是一个程序的名称…请自行查看…键入ls/bin/[…现在,如果没有空格,那么bash将查找名为[0或类似名称的程序,这在您的路径中肯定不存在


然后,相反的情况…变量赋值中的=周围必须没有空格。因此$isframecount=1应该是isframecount=1。请注意,我还删除了美元符号,这是正确的做法。

注意空格的重要性和不应该存在的地方。在这种情况下,if[$isframecount-eq 0]应该是if[$isframecount-eq 0]查看[和之前]后面的空格

if [ "$isframecount" -eq 0 ]
这样做的原因是,[实际上是一个程序的名称…请自行查看…键入ls/bin/[…现在,如果没有空格,那么bash将查找名为[0或类似名称的程序,这在您的路径中肯定不存在

然后,相反的情况…变量赋值中的=周围必须没有空格。因此$isframecount=1应该是isframecount=1。请注意,我还删除了美元符号,这就是方法

if [ "$isframecount" -eq 0 ]
方括号两侧都需要空格

isframecount=1
赋值语句中没有美元符号,在=周围没有空格

方括号两侧都需要空格

isframecount=1
在赋值语句中,=周围没有美元符号,也没有空格。

两个问题:

问题1:

测试运算符中需要有空格。请更改以下行:

if ["$isframecount" -eq 0]

问题2:

$isframecount=1

变量前不应有$符号,赋值运算符中不应有空格

将其更改为isframecount=1有两个问题:

问题1:

测试运算符中需要有空格。请更改以下行:

if ["$isframecount" -eq 0]

问题2:

$isframecount=1

变量前不应有$符号,赋值运算符中不应有空格


将其更改为isframecount=1

以便美元符号用于读取,而没有美元符号用于写入?因此美元符号用于读取,而没有美元符号用于写入?此外,作为一般经验法则,请引用变量!!此外,作为一般经验法则,请引用变量!!+1次要注意:bash实现[作为内置项,而不是使用/bin]/[。@chepner没错,Bash提供了几种传统外部可执行文件的内置替代方案。然而,这只是一种减少进程分叉的优化。学习Bash的人不必考虑这一点,它只会变得更加混乱。+1小注:Bash实现[作为内置文件,而不是使用/bin/[.@chepner没错,Bash提供了几种传统外部可执行文件的内置替代方案。然而,这只是一种减少进程分叉的优化。学习Bash的人不必考虑这一点,它只会变得更加混乱。