2016-09-01 5 views
0

У меня есть папка, содержащая файл file1.png, file2.png, ..., file5.png. Я хотел бы скопировать их в новую папку и переименовать их как file6.png в file10.png. Сценарий Баш я использовал:Добавить номер в сценарий bash

for i in `seq 1 5`; 
k=$((i+5)); 
do cp src/file$i.png dst/file$k.png; 
done; 

Однако линия k=$((i+5)) всегда говорит syntax error. Есть идеи?

+5

'do' должен идти до' к = $ ((я + 5)) ' – anubhava

+2

http://www.shellcheck.net/# помогает в таких случаях ... – Sundeep

+1

Как написано, полу- двоеточия совершенно не нужны. – user3439894

ответ

1

Вы должны сделать this-

for i in `seq 1 5` 
do 
k=$(($i+5)) 
cp src/file"$i".png dst/file"$k".png 
done 
+1

Без ущерба для '$' inside '((..))'. – sjsam

+0

Как написано, полуколоны совершенно не нужны. – user3439894

+0

@ user3439894, да, вы правы. Я был ленив во время моего копирования. Я изменил один лайнер на многострочный комментарий для большей читаемости. Теперь удалены полуколоны. – VM17

1

Вы забыли do после for:

for i in `seq 1 5`; do k=$((i+5)); echo $k; done; 
#output:   ---^--- 
6 
7 
8 
9 
10 
4

Ниже сценария сделать работу:

for i in {1..5} 
do # You need to put 'do' just after the for statement 
cp src/file"$i".png dst/file"$((i+5))".png 
done 

Примечания

  • См [ brace expansion ], чтобы узнать больше о {START..END}.

  • Примечание $((i+5)) возвращает результат туда, откуда он вызван, поэтому вы можете избежать использования промежуточной переменной k.