Как использовать BASH & # 39; для & # 39; цикл в сценариях оболочки
BASH (расшифровывается как Bourne Again Shell) – это язык сценариев, используемый большинством операционных систем на основе Linux и UNIX.
Вы можете запускать команды BASH в окне терминала одну за другой или добавлять команды в текстовый файл для создания сценария оболочки.
Самое замечательное в написании сценариев оболочки – то, что вы можете запускать их снова и снова. Например, представьте, что вам нужно добавить пользователя в систему, установить его разрешения и управлять его начальной средой. Вы можете либо записать команды на листе бумаги и запускать их по мере добавления новых пользователей, либо вы можете написать один скрипт и просто передать параметры в этот скрипт.
Языки сценариев, такие как BASH, имеют схожие программные конструкции с другими языками. Например, вы можете использовать параметры импорта, чтобы получить ввод с клавиатуры и сохранить их как переменные. Затем вы можете заставить скрипт выполнить определенное действие на основе значения входных параметров.
Ключевой частью любого языка программирования и написания сценариев является возможность снова и снова запускать один и тот же фрагмент кода.
Есть несколько способов повторить код (также известный как циклы). В этом руководстве вам будет показано, как написать цикл for.
Цикл for повторяет определенный раздел кода снова и снова. Они полезны для того, чтобы ряд команд продолжал работать до тех пор, пока не будет выполнено определенное условие, после чего они остановятся.
В этом руководстве вам будет показано пять способов использования цикла for в скрипте BASH.
Перед началом работы
Прежде чем вы начнете с примерами цикла for, вам нужно открыть окно терминала и выполнить следующие шаги:
-
Введите скрипты mkdir (подробнее о mkdir читайте здесь).
-
Введите CD-скрипты (это изменит каталог на скрипты ).
-
Введите nano examplen.sh (где n – пример, над которым вы работаете).
-
Введите сценарий.
-
Нажмите CTRL + O , чтобы сохранить, и CTRL + X , чтобы выйти.
-
Запустите bash examplen.sh (опять же, пример, с которым вы работаете – n ).
Как перебрать список
#!/bin/bash для номера в 1 2 3 4 5doecho $ numberdoneexit 0
BASH способ использования циклов for несколько отличается от того, как большинство других языков программирования и сценариев обрабатывают циклы for. Давайте разберем сценарий.
В цикле «все» в BASH операторы между do и done выполняются один раз для каждого элемента в списке.
В приведенном выше примере список – это все, что идет после слова в (т.е. 1 2 3 4 5).
Каждый раз, когда цикл повторяется, следующее значение в списке вставляется в переменную, указанную после слова “for” . В приведенном выше цикле переменная называется число .
Оператор echo используется для отображения информации на экране.
Следовательно, этот пример берет числа от 1 до 5 и выводит их один за другим на экран:
- 1
- 2
- 3
- 4
- 5
Как выполнить цикл между начальной и конечной точкой
Проблема с приведенным выше примером состоит в том, что если вы хотите обработать больший список (скажем, от 1 до 500), потребовались бы годы, чтобы набрать все числа в первую очередь.
Это подводит нас ко второму примеру, который показывает, как указать начальную и конечную точку:
#!/bin/bashfor число в {1..10} doecho "$ number" doneexit 0
Правила в основном одинаковы. Значения после слова “ in” составляют список для итерации, и каждое значение в списке помещается в переменную (т.е. число), и каждый раз, когда цикл повторяется, операторы между do и done выполняются.
Основным отличием является способ формирования списка. Фигурные скобки {} в основном обозначают диапазон, и диапазон, в данном случае, составляет от 1 до 10 (две точки разделяют начало и конец диапазона).
Таким образом, этот пример просматривает каждое число от 1 до 10 и выводит число на экран следующим образом:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Тот же цикл мог бы быть написан так, с синтаксисом, идентичным первому примеру:
для числа в 1 2 3 4 5 6 7 8 9 10
Как пропустить числа в диапазоне
В предыдущем примере показано, как выполнить цикл между начальной и конечной точкой, поэтому теперь мы рассмотрим, как пропустить числа в диапазоне.
Представьте, что вы хотите переключаться между 0 и 100, но показывать только каждое десятое число. Следующий скрипт показывает, как это сделать:
#!/bin/bashfor число в {0..100..10} doecho "$ number" doneexit 0
Правила в основном одинаковы. Существует список, переменная и набор операторов, которые должны выполняться между do и done . Список на этот раз выглядит так: {0..100..10}.
Первое число равно 0, а конечное число равно 100. Третье число (10) – это количество элементов в списке, которое оно будет пропускать.
Таким образом, приведенный выше пример отображает следующий вывод:
- 0
- 10
- 20
- 30
- 40
- 50
- 60
- 70
- 80
- 90
- 100
Более традиционный поиск петли
BASH способ написания циклов немного странен по сравнению с другими языками программирования.
Однако вы можете написать цикл for в стиле, аналогичном языку программирования C, например:
#!/bin/bashfor ((число = 1; число <100; число ++)) {if (($ number% 5 == 0)) thenecho "$ число делится на 5" fi} выход 0
Цикл начинается с установки номера переменной в 1 ( номер = 1 ). Цикл будет повторяться, пока значение числа меньше 100 ( число <100 ). Значение число изменяется, добавляя к нему 1 после каждой итерации ( номер ++ ).
Все между фигурными скобками выполняется через каждую итерацию цикла.
Бит между фигурными скобками проверяет значение числа , делит его на 5 и сравнивает остаток с 0. Если остаток равен 0, то число делится на 5 и затем отображается на экране. ,
Например:
- 5 делится на 5
- 10 делится на 5
- 15 делится на 5
Если вы хотите изменить размер шага итерации, вы можете изменить раздел number ++ на number = number + 2 , number = number + 5 или число = число + 10 и т. д.
Это число может быть уменьшено до число + = 2 или число + = 5 .
Практический пример
Для циклов можно сделать больше, чем повторять списки чисел. На самом деле вы можете использовать вывод других команд в качестве списка.
В следующем примере показано, как преобразовать аудиофайлы из MP3 в WAV:
#!/bin/bash
для файла в ./*.mp3dompg -w ./wavs/"$ndomfile enj".wav "$ file" сделано
Список в этом примере – это каждый файл с расширением .MP3 в текущей папке, а переменная – файл .
Команда mpg преобразует файл MP3 в формат WAV. Тем не менее, вам, вероятно, нужно сначала установить его, используя менеджер пакетов.