- Массивы bash
- Rukovodstvo
- статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
- Циклы массивов в Bash
- В этой статье мы покажем вам различные методы перебора массивов в Bash. Циклы массивов настолько распространены в программировании, что вам почти всегда придется использовать их в любом важном программировании, которое вы делаете. Чтобы помочь с этим, вы должны изучить и понять различные типы массивов и способы их перебора, что мы и представляем в этой статье. Прежде чем мы приступим к основной цели этого учебника / статьи, давайте узнаем немного больше о программировании с помощью оболочки Bash, а затем
- Краткое введение в оболочку Bash
- Создание сценариев оболочки с помощью Bash
- Циклы в Баше
- Массивы в Bash
- Цикл по массивам
Массивы bash
Если вы используете «стандартную» оболочку *NIX-системы, возможно, вы не знакомы с такой полезной особенностью bash как массивы. Хотя массивы в bash не так круты, как в P-языках (Perl, Python и PHP) и других языках программирования, они часто бывают полезны.
Bash-массивы имеют только численные индексы, но они не обязательны к использованию, то есть вы не должны определять значения всех индексов в явном виде. Массив целиком может быть определен путем заключения записей в круглые скобки:
Отдельные записи могут быть определены с помощью знакомого всем синтаксиса (от Бейсика (да простит меня Дейкстра — прим. переводчика) до Фортрана):
Правда, обратное выглядит сравнительно более уродливо. Если нужно обратиться к определенной записи, тогда:
«Фигурные скобки нужны для предотвращения конфликтов при разворачивании полных путей к файлам.«
Кроме того, доступны следующие странноватые конструкции:
$ # Все записи в массиве $# Все индексы в массиве $# Количество записей в массиве $# Длина первой записи (нумерация с нуля)
$ — сравнительно новое дополнение в bash и не является частью оригинальной реализации. Следующая конструкция демонстрирует пример простого использования массива. Обратите внимание на «[index]=value», это позволяет назначить конкретное значение конкретному номеру записи.
#!/bin/bash array=(one two three four [5]=five) echo "Array size: $" # Выводим размер массива echo "Array items:" # Выводим записи массива for item in $ do printf " %s\n" $item done echo "Array indexes:" # Выводим индексы массива for index in $ do printf " %d\n" $index done echo "Array items and indexes:" # Выводим записи массива с их индексами for index in $ do printf "%4d: %s\n" $index $ done
Запуск скрипта породит следующий вывод:
0: one
1: two
2: three
3: four
5: five
Обратите внимание, что символ «@» может быть использован вместо «*» в конструкциях типа , результат будет одинаковым за исключением разворачивания записи в кавычках. «$*» и «$@» выведут записи в кавычках, «$» вернет каждую запись как одно слово, «$» вернет каждую запись в виде отдельных слов.
Следующий пример покажет, как кавычки и конструкции без кавычек возвращают строки (особенно важно, когда в этих строках есть пробелы):
#!/bin/bash array=("first item" "second item" "third" "item") echo "Number of items in original array: $" for ix in $ do printf " %s\n" "$" done echo arr=($) echo "After unquoted expansion: $" for ix in $ do printf " %s\n" "$" done echo arr=("$") echo "After * quoted expansion: $" for ix in $ do printf " %s\n" "$" done echo arr=("$") echo "After @ quoted expansion: $" for ix in $ do printf " %s\n" "$" done
Number of items in original array: 4
first item
second item
third
item
After unquoted expansion: 6
first
item
second
item
third
item
After * quoted expansion: 1
first item second item third item
After @ quoted expansion: 4
first item
second item
third
item
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Циклы массивов в Bash
В этой статье мы покажем вам различные методы перебора массивов в Bash. Циклы массивов настолько распространены в программировании, что вам почти всегда придется использовать их в любом важном программировании, которое вы делаете. Чтобы помочь с этим, вы должны изучить и понять различные типы массивов и способы их перебора, что мы и представляем в этой статье. Прежде чем мы приступим к основной цели этого учебника / статьи, давайте узнаем немного больше о программировании с помощью оболочки Bash, а затем
В этой статье мы покажем вам различные методы перебора массивов в Bash. Циклы массивов настолько распространены в программировании, что вам почти всегда придется использовать их в любом важном программировании, которое вы делаете. Чтобы помочь с этим, вы должны изучить и понять различные типы массивов и способы их перебора, что мы и представляем в этой статье.
Прежде чем перейти к основной цели этого руководства / статьи, давайте узнаем немного больше о программировании с помощью оболочки Bash, а затем мы покажем некоторые общие конструкции программирования Bash.
Краткое введение в оболочку Bash
Shell — это термин Unix для интерактивного пользовательского интерфейса с операционными системами. Оболочка — это уровень программирования, который понимает и выполняет команды, вводимые пользователем. В некоторых системах оболочка называется интерпретатором команд. По сути, все, что вы можете делать с инструментами ОС с графическим интерфейсом пользователя в Linux, вы обычно можете делать то же самое с оболочкой.
Большинство Unix-подобных операционных систем поставляются с оболочкой, такой как оболочка Bash, оболочка Bourne, оболочка C (csh) и KornShell. Однако эти оболочки не всегда предустановлены в популярных дистрибутивах Linux, таких как Ubuntu, Cent OS, Kali, Fedora и т. Д. Хотя популярная оболочка Bash входит в состав большинства дистрибутивов Linux и OSX.
Оболочка Bash — это улучшенная версия старой оболочки Bourne, которая была одной из первых оболочек Unix / Linux, широко используемых пользователями. Он имел ограниченные возможности по сравнению с сегодняшними оболочками, и из-за этого большая часть работы по программированию почти полностью выполнялась внешними утилитами.
Bash, которая является POSIX-совместимой оболочкой, просто означает , что B ourne- коэффициент усиления ш Ell. Первоначально он создавался как замена оболочки Борна и, следовательно, содержал множество улучшений, недоступных в старых оболочках.
Чтобы узнать тип или версию Bash, установленную в вашей ОС, просто введите следующую команду:
$ echo $BASH_VERSION 3.2.57(1)-release
Создание сценариев оболочки с помощью Bash
Сценарий оболочки — это файл, содержащий одну или несколько команд, которые вы должны ввести в командной строке. В сценарии эти команды выполняются последовательно автоматически, как в программе на C или Python. Вот несколько примеров общих команд:
- cat : отображать содержимое файла или объединять два файла вместе. Исходное название команды ‘cat’ — ‘concatenate’.
- ls : список файлов / папок в каталоге
- pwd : отображать путь к вашему текущему рабочему каталогу
- chmod : изменить или изменить права доступа к файлу
- chown : изменить владельца файла или программы-скрипта
- mkdir : создать каталог
- mv : переместить файл или папку из одного каталога в другой.
- rm : удалить (удалить) файл или каталог
- cd : изменить текущий рабочий каталог
- exit : закрыть или выйти из терминала
Есть еще много других базовых команд, не упомянутых здесь, информацию о которых вы можете легко найти, учитывая обширный объем документации в Интернете. Хотя изучение основных команд выше научит вас многому из того, что вам нужно знать.
В этой статье вы могли заметить, что каждая первая строка сценария оболочки начинается с символа shebang или hash-bang. Это особый тип комментария, который сообщает оболочке, какую программу использовать для выполнения файла. Для сценариев оболочки это строка #!/bin/bash
Теперь, когда вы познакомились с некоторыми общими командами Bash, пришло время понять, как использовать массивы и циклы. И, наконец, мы покажем несколько реальных примеров того, как можно перебирать массивы в сценариях Bash.
Циклы в Баше
«Циклы» или «циклы» — это просто конструкция, в которой вы выполняете определенное событие или последовательность команд до тех пор, пока не будет выполнено определенное условие, которое обычно устанавливается программистом. В программировании на Bash нам доступны три типа циклов:
Пока цикл
Если вы когда-либо раньше программировали на каком-либо языке, вы, вероятно, уже знаете о циклах и о том, как их можно использовать для управления потоком программы или сценария в дополнение к if , elif и else . Цикл позволяет перебирать список или группу значений до тех пор, пока не будет выполнено определенное условие.
Ниже приведен синтаксис в while цикла:
Состояние в while петля может зависеть от ранее объявленных переменных, в зависимости от ваших потребностей. Предположим, мы написали программу с именем count.sh . Программа счетчика печатает числа от 0 до 10. Таким образом, наша программа счетчика будет «зацикливаться» только от 0 до 10.
#!/bin/bash count=0 while [ $count -le 10 ] do echo "$count" count=$(( $count + 1 )) done
Условие здесь — $count -le 10 , которое вернет true значение, пока $count меньше или равна ( -le ) 10. Каждый раз, когда это условие возвращает true do команды между do и done .
До цикла
В дополнении к некоторому while , мы можем также использовать until цикла , который очень похож на в while цикла. Синтаксис until петли такого же , как и в while цикл, однако основное отличие состоит в том , что условие противоположно в while. Здесь команды цикла выполняются каждый раз, когда условие не выполняется или возвращает false .
#!/bin/bash count=0 until [ $count -gt 10 ] do echo "$count" count=$(( $count + 1 )) done
Здесь цикл выполняется каждый раз, когда $count не превышает ( -gt ) 10.
Для цикла
Синтаксически for немного отличается от циклов while или until Эти типы циклов обрабатывают увеличение счетчика за нас, тогда как раньше нам приходилось увеличивать его самостоятельно.
Синтаксис цикла for в Bash:
В условии цикла мы сообщаем ему, с какого числа запускать счетчик ( n=1 ), с какого числа завершать счетчик ( n
Другой способ использовать этот цикл:
#!/bin/bash for user in Kate Jake Patt do echo "$user" done
Здесь мы выполняем цикл для каждого экземпляра строки, которым в данном случае являются «Кейт», «Джейк» и «Патт».
Массивы в Bash
В Bash есть два типа массивов. Бывают ассоциативные массивы и массивы с целочисленным индексом. Элементы в массивах часто упоминаются по их порядковому номеру, который представляет собой позицию, в которой они находятся в массиве. Эти номера индексов всегда являются целыми числами, начинающимися с 0.
Ассоциативный массив немного новее, он появился в версии Bash 4.0.
Ниже приведен синтаксис объявления и использования массива с целочисленным индексом:
#!/bin/bash array=( ABCDEFG ) echo "$" echo "$" echo "$" echo "$" echo "$" echo "$" echo "$"
В этой статье мы собираемся сосредоточиться на массиве с целочисленным индексом для нашего руководства по циклам массивов, поэтому мы пока пропустим рассмотрение ассоциативных массивов в Bash, но просто знайте, что это бог знать об их существовании.
Цикл по массивам
Теперь, когда мы увидели и поняли основные команды оболочки Bash, а также основные концепции циклов и массивов в Bash, давайте продолжим и рассмотрим полезный сценарий, использующий циклы и массивы вместе.
В нашем простом примере ниже мы предполагаем, что вы хотите вывести на экран список зарегистрированных пользователей вашего веб-сайта. Список пользователей хранится в переменной users , которую нужно перебрать, чтобы отобразить их.
#!/bin/bash users=(John Harry Jake Scott Philis) for u in "$" do echo "$u is a registered user" done
С помощью этого синтаксиса вы будете перебирать users , при этом каждое имя временно сохраняется в u . [@] сообщает интерпретатору, что это индексированный массив, который мы будем перебирать.
Есть несколько способов использовать циклы массивов в программировании, поэтому не ограничивайте себя тем, что вы видите здесь. Мы просто показали самые простые примеры, которые вы можете улучшить и изменить в соответствии со своим вариантом использования.
Licensed under CC BY-NC-SA 4.0