ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Bash для цикла в одной строке

Bash Heredoc

В любом языке программирования или сценариях цикл – квинтэссенция функции. Циклы обычно предназначены для выполнения повторяющейся задачи до тех пор, пока не будет выполнено определенное условие. Bash – это мощный язык сценариев, который поддерживает все основные функции языка сценариев (включая циклы).

Эта статья демонстрирует однострочные циклы for в Bash.

 

Bash для цикла

В bash есть несколько типов циклов – для, пока и до. Каждый тип петли имеет разную структуру. Однако основы остаются прежними. Для новичков эта статья подробно объясняет различные циклы bash и способы их реализации.

Как следует из названия этой статьи , мы сосредоточимся на цикле. Хотя для цикла for обычно требуется несколько строк, мы можем представить его в одной строке, если цикл достаточно прост. Однако этот процесс требует понимания основ bash для цикл.

Для запуска наших кодов bash нам понадобится сценарий оболочки. У меня уже есть фиктивный скрипт для запуска наших кодов.

$ cat dummy.sh

Для петлевой структуры

Это базовая структура цикла for в bash.

for  in [list]
dodone

Вот краткий пример реализации этой структуры цикла for.

for i in {1..5}
do
echo "number: $i"
done

Bash также поддерживает цикл for в стиле C. Если у вас есть опыт программирования на C, тогда будет легко понять цикл for в стиле C.

for ((; ; ))
dodone

Приведем в действие цикл for в стиле C.

for ((i = 1; i <= 5; i++)); do
echo "number: $i"
done

Цикл For также может работать с файлами. В следующем примере цикл будет искать все разделы на диске «/dev/sda» и распечатывать их.

for i in /dev/sda*; do
echo "$i"
done

Одна строка для цикла

Обсудив основы, мы можем теперь сжать циклы for в одну строку. По сути, мы удалим символы новой строки из всего кода цикла for. Мы также можем запускать эти циклы прямо из командной строки.

Сожмем первый пример. Если исключить все новые строки, код будет выглядеть так.

$ for i in {1..5}; do echo "number: $i"; done

Как видите, все новые строки удалены. Вместо этого новые строки заменяются точкой с запятой (;).

Мы можем сделать то же самое с циклами for в стиле C.

$ for ((i = 1; i <= 5; i++)); do echo "number: $i"; done

Взгляните на следующий пример. Все файлы конфигурации внутри «/etc». будет скопирован в качестве резервной копии в каталог «~/backup».

$ for i in /etc/*.conf; do cp $i /home/viktor/backup; done

Для цикла с условными выражениями

Во многих случаях цикл будет содержать условные выражения для принятия решений в различных точках повторения.

Здесь следующий цикл for напечатает все четные числа в фиксированном диапазоне.

for i in {1..10}; do
if [ $((i%2)) -eq 0 ]; then
echo "$i even"
fi
done

Можно выразить весь этот цикл в одной строке. Как и раньше, замените все символы новой строки точками с запятой (;).

$ for i in {1..10}; do if [ $((i%2)) -eq 0 ]; then echo "$i even"; fi; done

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

 

Разные примеры

Вот несколько строк для циклов для справки.

$ for i in 1 2 3 4 5 ; do echo "number: $i"; done
$ for i in cpu motherboard ram psu gpu; do echo "computer part: $i"; done

Следующий пример будет бесконечным циклом.

$ for (( ; ; )); do echo "to infinity!"; done

Последняя мысль

Эта статья демонстрирует различные эффективные примеры однострочного цикла. Обычный цикл for очень легко превратить в одну строку. Надеюсь, после практики этих примеров читатели поймут, как использовать bash for loop в одной строке.

Удачных вычислений!

Exit mobile version