В этой статье мы покажем вам различные методы перебора массивов в 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 <list>
do
<commands>
done
Состояние в 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:
#!/bin/bash
for (( n=1; n<=10; n++ ))
do
echo "$n"
done
В условии цикла мы сообщаем ему, с какого числа запускать счетчик (
n=1
), с какого числа завершать счетчик ( n<=10
) и насколько
увеличить счетчик на ( n++
).
Другой способ использовать этот цикл:
#!/bin/bash
for user in Kate Jake Patt
do
echo "$user"
done
Здесь мы выполняем цикл для каждого экземпляра строки, которым в данном случае являются «Кейт», «Джейк» и «Патт».
Массивы в Bash
В Bash есть два типа массивов. Бывают ассоциативные массивы и массивы с целочисленным индексом. Элементы в массивах часто упоминаются по их порядковому номеру, который представляет собой позицию, в которой они находятся в массиве. Эти номера индексов всегда являются целыми числами, начинающимися с 0.
Ассоциативный массив немного новее, он появился в версии Bash 4.0.
Ниже приведен синтаксис объявления и использования массива с целочисленным индексом:
#!/bin/bash
array=( ABCDEFG )
echo "${array[0]}"
echo "${array[1]}"
echo "${array[2]}"
echo "${array[3]}"
echo "${array[4]}"
echo "${array[5]}"
echo "${array[6]}"
В этой статье мы собираемся сосредоточиться на массиве с целочисленным индексом для нашего руководства по циклам массивов, поэтому мы пока пропустим рассмотрение ассоциативных массивов в Bash, но просто знайте, что это бог знать об их существовании.
Цикл по массивам
Теперь, когда мы увидели и поняли основные команды оболочки Bash, а также основные концепции циклов и массивов в Bash, давайте продолжим и рассмотрим полезный сценарий, использующий циклы и массивы вместе.
В нашем простом примере ниже мы предполагаем, что вы хотите вывести на
экран список зарегистрированных пользователей вашего веб-сайта. Список
пользователей хранится в переменной users
, которую нужно перебрать,
чтобы отобразить их.
#!/bin/bash
users=(John Harry Jake Scott Philis)
for u in "${users[@]}"
do
echo "$u is a registered user"
done
С помощью этого синтаксиса вы будете перебирать users
, при этом
каждое имя временно сохраняется в u
. [@]
сообщает интерпретатору,
что это индексированный массив, который мы будем перебирать.
Есть несколько способов использовать циклы массивов в программировании, поэтому не ограничивайте себя тем, что вы видите здесь. Мы просто показали самые простые примеры, которые вы можете улучшить и изменить в соответствии со своим вариантом использования.