Циклы — одна из фундаментальных концепций языков программирования. Циклы удобны, когда вы хотите запускать серию команд снова и снова, пока не будет достигнуто определенное условие.
В языках сценариев, таких как Bash, циклы полезны для автоматизации повторяющихся задач. В Bash доступны три основные конструкции цикла: for, while и until циклы.
В этом руководстве мы рассмотрим основы циклов for в Bash. Мы также покажем вам, как использовать операторы break и continue чтобы изменить ход цикла.
Содержание
Стандартный for цикл в Bash
Цикл for выполняет итерацию по списку элементов и выполняет заданный набор команд.
Цикл for Bash имеет следующую форму:
for item in [LIST]
do
[COMMANDS]
done
Список может быть серией строк, разделенных пробелами, диапазоном чисел, выводом команды, массивом и т. Д.
Оберните струны
В приведенном ниже примере цикл будет перебирать каждый элемент в списке строк, и переменный element будет установлен на текущий элемент:
for element in Hydrogen Helium Lithium Beryllium
do
echo "Element: $element"
done
Цикл выдаст следующий результат:
Element: Hydrogen
Element: Helium
Element: Lithium
Element: Beryllium
Цикл по диапазону чисел
Вы можете использовать выражение последовательности, чтобы указать диапазон чисел или символов, задав начальную и конечную точки диапазона. Выражение последовательности принимает следующую форму:
{START..END}
Вот пример цикла, который перебирает все числа от 0 до 3:
for i in {0..3}
do
echo "Number: $i"
done
Number: 0
Number: 1
Number: 2
Number: 3
Начиная с Bash 4, также можно указывать приращение при использовании диапазонов. Выражение принимает следующий вид:
{START..END..INCREMENT}
Вот пример, показывающий, как увеличить на 5:
for i in {0..20..5}
do
echo "Number: $i"
done
Number: 0
Number: 5
Number: 10
Number: 15
Number: 20
Перебирать элементы массива
Вы также можете использовать цикл for для перебора массива элементов.
В приведенном ниже примере мы определяем массив с именем BOOKS и перебираем каждый элемент массива.
BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby')
for book in "${BOOKS[@]}"; do
echo "Book: $book"
done
Book: In Search of Lost Time
Book: Don Quixote
Book: Ulysses
Book: The Great Gatsby
Цикл for в Bash в стиле C
Синтаксис цикла for стиле C имеет следующий вид:
for ((INITIALIZATION; TEST; STEP))
do
[COMMANDS]
done
Часть INITIALIZATION выполняется только один раз при запуске цикла. Затем оценивается TEST . Если это ложь, цикл прекращается. Если TEST истинен, команды внутри цикла for выполняются, а часть STEP обновляется.
В следующем примере кода цикл начинается с инициализации i = 0 и перед каждой итерацией проверяется, является ли i ≤ 10 . Если true, он печатает текущее значение i и [увеличивает переменную] i на 1 ( i++ ), в противном случае цикл завершается.
for ((i = 0 ; i <= 1000 ; i++)); do
echo "Counter: $i"
done
Цикл повторится 1001 раз и выдаст следующий результат:
Counter: 0
Counter: 1
Counter: 2
...
Counter: 998
Counter: 999
Counter: 1000
Операторы break и continue
Операторы break и continue могут использоваться для управления выполнением цикла for.
Оператор break
Оператор break завершает текущий цикл и передает управление программой оператору, следующему за завершенным оператором. Обычно он используется для завершения цикла при выполнении определенного условия.
В следующем примере мы используем оператор if для прекращения выполнения цикла, когда текущий повторяемый элемент становится равным «Lithium».
for element in Hydrogen Helium Lithium Beryllium; do
if [[ "$element" == 'Lithium' ]]; then
break
fi
echo "Element: $element"
done
echo 'All Done!'
Element: Hydrogen
Element: Helium
All Done!
Оператор continue
Оператор continue завершает текущую итерацию цикла и передает управление программой следующей итерации цикла.
В следующем примере мы перебираем диапазон чисел. Когда текущий повторяемый элемент равен ‘2’, оператор continue заставит выполнение вернуться к началу цикла и продолжить следующую итерацию:
for i in {1..5}; do
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
Number: 1
Number: 3
Number: 4
Number: 5
Примеров циклов for в Bash
Переименование файлов с пробелами в имени файла
В следующем примере показано, как переименовать все файлы в текущем каталоге с пробелом в его именах, заменив пробел на подчеркивание:
for file in * *; do
mv "$file" "${file// /_}"
done
Давайте разберем код построчно:
- Первая строка создает цикл
forи выполняет итерацию по списку всех файлов с пробелом в имени. Выражение* *создает список. - Вторая строка применяется к каждому элементу списка и перемещает файл в новый, заменяя пробел знаком подчеркивания (
_). Часть${file// /_}использует расширение параметра оболочки для замены шаблона в параметре строкой. doneуказывает конец сегмента цикла.
Изменение расширения файла
В следующем примере показано, как использовать цикл for в Bash for переименования всех файлов, оканчивающихся на .jpeg, в текущем каталоге путем замены расширения файла с .jpeg на .jpg.
for file in *.jpeg; do
mv -- "$file" "${file%.jpeg}.jpg"
done
Давайте проанализируем код построчно:
- Первая строка создает цикл
forи выполняет итерацию по списку всех файлов, заканчивающихся на ‘.jpeg’. - Вторая строка применяется к каждому элементу списка и перемещает файл в новый, заменяя «.jpeg» на «.jpg».
${file%.jpeg}чтобы удалить часть ‘.jpeg’ из имени файла, используя расширение параметра оболочки doneуказывает конец сегмента цикла.
Выводы
Цикл for Bash используется для повторного выполнения заданного набора команд определенное количество раз.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Здравствуйте,а не подскажите что выполняет данный цикл?
#!/bin/bash
for i in {2000..2017}
do
for j in {00..12}
do
mv $i$j*jpg $i/$j
done
done
перетаскивает и переименовывает файлы