0

我是 csh 脚本的新手,这是我第一次编写任何脚本:这是代码:

#!/bin/csh

#arg1 path 
#arg2 condition 
#arg3 number of files 
#arg4-argN name of files

set i=0 
while ( $i < $3 ) 
        if ($2 == 0) then 
                cp /remote/$1/$($i+4) $1/new.$( $i+4 ) 
                p4 add $1/new.$($i+4) 
        else 
                p4 edit $1/new.$($i+4) 
                cp /remote/$1/$($i+4) $1/new.$($i+4)
        endif 
        $i = $i+1 
end 

但在这里我不断出错。非法变量名。我已经阅读了一些教程,但没有得到任何相关的东西。请帮忙。谢谢。

4

2 回答 2

0

您可以在第一行使用标志 -v 和 -x 来查看脚本的作用

#!/bin/csh -vx

问题出现在您尝试将四个添加到计数器变量的部分

$($i+4)

csh 不能那样添加。我会使用一个临时变量将四个添加到您的计数器,然后在所有调用中使用该变量

@ i = 0 
while ( $i < $3 ) 
        @ iplusfour = $i + 4
        if ($2 == 0) then 
                cp /remote/$1/$($i+4) $1/new.$iplusfour 
                p4 add $1/new.$iplusfour 
        else 
                p4 edit $1/new.$iplusfour 
                cp /remote/$1/$iplusfour $1/new.$iplusfour 
        endif 
        @i = $i + 1 
end 

我还纳入了 Willams 的评论。

于 2017-04-05T06:24:36.687 回答
0

最后一个增量可以简化为@ i++,即修饰muluman88的解决方案:

@ i = 0 
while ( $i < $3 ) 
    @ iplusfour = $i + 4
    if ($2 == 0) then 
        cp /remote/$1/$($i+4) $1/new.$iplusfour 
        p4 add $1/new.$iplusfour 
    else 
        p4 edit $1/new.$iplusfour 
        cp /remote/$1/$iplusfour $1/new.$iplusfour 
    endif 
    @ i++
end 

确保标志后有(空格) 。@

于 2019-07-21T20:00:02.597 回答