Linux bash for массив

Массивы 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

Читайте также:  Sl m4070fr драйвер linux

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. Первоначально он создавался как замена оболочки Борна и, следовательно, содержал множество улучшений, недоступных в старых оболочках.

Читайте также:  All about fedora linux

Чтобы узнать тип или версию 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 .

Читайте также:  Find in files linux command line
До цикла

В дополнении к некоторому 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

Источник

Оцените статью
Adblock
detector