@MagicalGroo

Почему выводится только одна единица?

Требуется, чтобы баш писал имена ПК по порядку в стиле "PC-001" от 1 до 150, для чисел сделал такой bash, и он работает, но "out" выдает только 001, 010, 100.

#!/bin/bash

for ((i=1; i < 150; i++)); do

    if [[ $i<10 && $i>=0 ]] ; then
        out="00$i"
    fi
    if [[ $i<100 && $i>=10 ]] ; then
        out="0$i"
    fi
    if [[ $i<1000 && $i>=100 ]] ; then
        out="$i"
    fi
echo $out
done

Вывод:
001
001
001
001
001
001
001
001
001
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
010
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100

и тд.
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
echo -e "\n"PC-{001..150}


for i in {0..150}; do printf "%03d\n" $i; done


for i in $(seq -w 1 150); do echo "PC-$i"; done

ну или сравнение чисел делается через спец. операторы -gt, -ge, -lt, -le, -eq, -ne
#!/bin/bash

for ((i=1; i < 150; i++)); do
    if [[ $i -lt 10 && $i -ge 0 ]] ; then
        out="00$i"
    fi
    if [[ $i -lt 100 && $i -ge 10 ]] ; then
        out="0$i"
    fi
    if [[ $i -lt 1000 && $i -ge 100 ]] ; then
        out="$i"
    fi
    echo PC-$out
done
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Если вам надо дополнить число нулями, это отлично умеет printf:
for i in {1..999}
do
    printf "%03d\n" $i
done
Ответ написан
Комментировать
Slifez
@Slifez
QA Engineer
Простой цикл для последовательного вывода PC-001 - PC-150 выглядит примерно так:
for ((i = 1; i <= 150; i++)); do
echo PC-$i
done

Если номера подаются в не отсортированном списке, то следует сначала вычислить номер: sed 's/...//'
Затем их отсортировать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы