2010-10-24 3 views
3

я есть следующие строки в Баш скрипт под Linux:Как петля в скрипте bash?

... 
mkdir max15 
mkdir max14 
mkdir max13 
mkdir max12 
mkdir max11 
mkdir max10 
... 

как синтаксис для ввода их в цикле, так что я не должен писать числа (15,14 ..)?

ответ

4
for a in `seq 10 15`; do mkdir max${a}; done 

seq будет генерировать числа от 10 к 15.

EDIT: Я привык к этой структуре с многих лет. Однако, когда я наблюдал другие ответы, это правда, что {START..STOP} намного лучше. Теперь я должен привыкнуть к созданию каталогов гораздо приятнее: mkdir max{10..15}.

+0

Помните, что это работает только для bash. – enzotib

1
for i in {1..15} ; do 
    mkdir max$i 
done 
+2

Если вы хотите, чтобы значения 1..9 были заполнены 0, вы используете {00..15} в bash4 – pepoluan

14

с Баш, нет необходимости использовать внешние команды, как seq для генерации чисел.

for i in {15..10} 
do 
mkdir "max${i}" 
done 

или просто

mkdir max{01..15} #from 1 to 15 

mkdir max{10..15} #from 10 to 15 

говорят, что если ваши номера генерируются динамически, вы можете использовать стиль C цикл

start=10 
end=15 
for((i=$start;i<=$end;i++)) 
do 
    mkdir "max${i}" 
done 
6

никаких петель, необходимых для выполнения этой задачи:

mkdir max{15..10} max0{9..0} 

... но если вам нужен цикл const ruct, вы можете использовать один из:

for i in $(seq [ <start> [ <step> ]] <stop>) ; do 
    # you can use $i here 
done 

или

for i in {<start>..<stop>} ; do 
    # you can use $i here 
done 

или

for ((i=<start> ; i < stop ; i++)) ; do 
    # you can use $i here 
done 

или

seq [ <start> [ <step> ]] <stop> | while read $i ; do 
    # you can use $i here 
done 

Обратите внимание, что этот последний не будет держать значение $ i за пределами цикла, из-за |, который запускает подклассу