В любом языке программирования или сценариях цикл – квинтэссенция функции. Циклы обычно предназначены для выполнения повторяющейся задачи до тех пор, пока не будет выполнено определенное условие. 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 в одной строке.
Удачных вычислений!