синтаксис csh-скрипта

Я новичок в скрипте 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 

но здесь я продолжаю получать ошибки. Недопустимое имя переменной. Я прочитал какой-то учебник, но ничего не понял. Пожалуйста помоги. Спасибо в рекламе.


person Abhi    schedule 26.02.2013    source источник
comment
пожалуйста, игнорируйте / до того, как # я добавил их, так как эта строка выделена жирным шрифтом   -  person Abhi    schedule 26.02.2013
comment
Поскольку вы новичок в сценариях оболочки, вы должны знать, что существуют сомневаюсь в целесообразности написания сценариев оболочки в csh. Я полагаю, что у вас есть выбор.   -  person minopret    schedule 26.02.2013
comment
спасибо, руах, теперь это выглядит намного лучше :)   -  person Abhi    schedule 26.02.2013
comment
P.S. Я хочу признать, что сомнения в оболочке - это вопрос мнения. Мой например.   -  person minopret    schedule 26.02.2013
comment
@miopret Не только твое! Синтаксис csh по своей сути неоднозначен (даже в большей степени, чем sh!), и клинически доказано, что чрезмерное использование csh приводит к слабоумию, псориазу и целому ряду других проблем. Если серьезно, всех новичков в csh нужно заранее предупредить, что выбор csh — это шаг в неправильном направлении с точки зрения того, чтобы стать лучшим разработчиком.   -  person William Pursell    schedule 26.02.2013
comment
Это должно быть @ i = $i + 1? Кроме того, вы можете рассчитать количество файлов из ${#argv} вместо того, чтобы зависеть от ввода пользователем правильного числа.   -  person William    schedule 26.02.2013
comment
спасибо @minopret и Уильяму за ценную информацию.   -  person Abhi    schedule 27.02.2013


Ответы (2)


Вы можете использовать флаги -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 

Я также включил комментарий Уилламса.

person j-hap    schedule 05.04.2017

Последнее приращение можно упростить до @ 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 

Убедитесь, что есть знаки (spaces) after the @.

person gammarayon    schedule 21.07.2019