Управление числами и цикл for

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
lgar
Сообщения: 117
ОС: Ubuntu

Управление числами и цикл for

Сообщение lgar »

Код: Выделить всё

set -x
ARRAY=()
start=$1
end=$2
step=$3
host=$4
#cmd="{$1..$2..$3}"
#c=$cmd
#for num in $c; do ARRAY+=("${host}${num}");  done
for (( num=$start; num<=$end; num+=$step )); do
    ARRAY+=("${host}${num}")
done
echo ${ARRAY[@]}


Хочу сделать скрипт, который бы за меня генерировал хосты: host01 host02 host03 или server1 server2 server3

Пример.

./hostreg 01 10 1 backup
backup01 backup02 backup03 backup04 backup05 backup06 backup07 backup08 backup09 backup10

Столкнулся со следующей проблемой,

C-стильный for сокращает 01 до 1, а обычная конструкция

Код: Выделить всё

for num in {01..10..1}; do ARRAY+=("backup${num}");  done


не позволяет вместо себя добавить переменные, то есть

Код: Выделить всё

for num in {$start..$end..$step}


Точнее, они заменяются, но for считает их одним целым и делает в итоге: echo 'backup{01..10..1}'

Какие способы есть обхода?

Спасибо.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: Управление числами и цикл for

Сообщение /dev/random »

man seq
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Управление числами и цикл for

Сообщение SLEDopit »

lgar писал(а):
19.11.2013 19:40
Точнее, они заменяются, но for считает их одним целым и делает в итоге: echo 'backup{01..10..1}'
Ну вот вы практически сами ответ и написали. Нужно просто выполнить:

Код: Выделить всё

echo backup{01..10..1}
и будет всё отлично.
если всенепременно нужен for, то

Код: Выделить всё

for item in backup{01..10..1} ; do echo $item ; done


хотя seq, конечно, универсальнее в плане переносимости на другие шеллы.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Ответить