2014-02-18 75 views
1

我读的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 

我得到“命令未找到错误”当我尝试运行上面;任何指针?

回答

2

小心他们重要的空间和应该没有的地方。在这种情况下,if ["$isframecount" -eq 0]应该是if [ "$isframecount" -eq 0 ](请参见[之后和]之前的空格)。

这样做的原因是,[实际上是一个程序的名字...自己见...类型ls /bin/[ ......现在,如果没有空间,那么bash将寻找一个名为程序["0"或类似的东西,这当然不存在于你的道路上。

然后,相反的情况......在变量赋值中=周围必须没有空格。所以$isframecount = 1应该是isframecount=1。请注意,我也删除了美元符号,这是要走的路。

+1

+1小记:'bash'工具'['为内置,而不是使用'/斌/ ['。 – chepner

+0

@chepner Right,Bash提供了几种传统外部可执行文件的内置替代方案。然而,这只是一种优化来减少进程分叉。学习bash的人不必考虑这一点,它只会变得更加混乱。 – jwatkins

2
if [ "$isframecount" -eq 0 ] 

方括号两边都需要空格。

isframecount=1 

没有美元符号,围绕=没有空格在赋值语句。

+0

所以美元符号是为了阅读,没有它是为了写作? – johnbakers

2

两个问题:

问题1:

你需要有空格test运营商。更改以下行:

if ["$isframecount" -eq 0] 

if [ "$isframecount" -eq 0 ] 

问题2:

$isframecount = 1

应该有前变量没有$标志和赋值运算符

没有空格

将其更改为isframecount=1

+0

此外,作为一般的经验法则,引用您的变量! –