Array in linux script

Массивы Bash

Невозможно представить себе язык программирования, который не поддерживал бы массивов. Под массивами обычно подразумеваются упорядоченные списки строк, символов или любых других объектов. Неважно как они реализованы в большинстве языков программирования, они помогают лучше управлять данными.

Язык сценариев Bash тоже имеет свои возможности работы с массивами. В этой статье мы рассмотрим как работают массивы Bash, как их создавать и использовать. В некоторых случаях это очень удобно.

Массивы Bash

Массивы оболочки Bash работают почти так же, как и в других языках программирования. Перед тем как вы сможете использовать массив, его нужно объявить. Это можно сделать несколькими способами, первый из них — это использование команды оболочки declare:

declare -a имя_массива

Но необязательно делать именно так, вы можете сразу начать задавать элементы массива по нужным номерам:

имя_массива[ XX ] = значение

Здесь XX обозначает индекс массива. Еще один удобный способ создавать массивы строк Bash — это просто перечислить все элементы в круглых скобках:

имя_массива=( э лемент_1, элемент_2 элемент_3 . )

Или вы можете сразу задать индекс массива для каждого из элементов:

имя_массива=( [ XX ]= значение [ XX ]= значение . . . )

Также можно прочитать значения для массива из клавиатуры или другого источника ввода:

read -a имя_массива

При вводе элементов массива они должны быть разделены символом пробела. Для получения значений элементов массива используйте синтаксис фигурных скобок, обратите внимание, что нумерация элементов массива, как и в большинстве языков начинается с нуля:

Это все основные моменты, которые будут вам полезны при использовании массивов, теперь нам осталось рассмотреть основные примеры, чтобы вам было более понятно как все это работает.

Примеры использования массивов Bash

Теперь рассмотрим примеры массивов bash. Сначала нам нужно создать массив, который мы будем использовать для примеров, на мой взгляд будет проще использовать синтаксис с круглыми скобками. Вообще, массивы используются в скриптах, но мы будем их применять прямо в оболочке Bash. Для начала так будет проще. Создаем массив:

array=(первый второй третий четвертый пятый)

Теперь попытаемся вывести один из элементов массива по его индексу:

Чаще всего используются массивы строк Bash, но иногда могут встречаться и цифры. Помните про нумерацию? Индексы элементов массива начинаются с нуля. Для вывода значения элемента по индексу можно использовать и немного другой синтаксис:

Вы можете вывести все элементы:

Все элементы, начиная с номера 1:

Вывести все элементы которые находятся в диапазоне от 1 до 4:

Чтобы узнать длину первого элемента выполните:

А посмотреть количество элементов массива Bash можно таким же синтаксисом:

Кроме всего прочего, вы можете заменить одни символы в определенном элементе массива или во всем массиве на другие. Для этого используйте:

В некоторых случаях, для перебора элементов массива очень удобно использовать циклы. На этот раз сделаем небольшой скрипт:

Читайте также:  Linux узнать свой локальный ip адрес

array=(первый второй третий четвертый пятый)
for i in $
do
echo $i
done

Внутри цикла вы можете делать со значением элемента все, что вам нужно. Как я уже писал выше, вы можете прочитать значения для массива с помощью функции read:

echo «Введите элементы массива:»
read -a array
echo «Результат:»
for i in $
do
echo $i
done

Как и в любом другом варианте, вам нужно, чтобы все элементы были разделены пробелом. Точно так же можно присвоить массиву результат выполнения команды. Например, сохраним список файлов, полученный от ls:

Усложним задачу и сделаем скрипт, который будет выводить все файлы из указанной директории, которые имеют права доступа 755:

if [ $# -ne 1 ]; then
echo «Используйте: $0 »
exit $ERR
fi

if [ ! -d $1 ]; then
echo «Каталог $1 не существует»
exit $ERR
fi

temp=( $(find $1 -maxdepth 1 -type f) )

for i in «$»
do
perm=$(ls -l $i)
if [ `expr $ : «-rwxr-xr-x»` -eq 10 ]; then
echo $
fi
done

Теперь проверим наш скрипт на папке /bin. Но перед этим нужно дать ему права на выполнение:

chmod u+x ./lsperm.sh
$ ./lsperm.sh

Как видите, все работает. Кроме номеров, в качестве индексов для массивов можно использовать строки. Такие массивы Bash называются ассоциативными и поддерживаются они начиная с четвертной версии Bash. Для создания ассоциативного массива используется declare с опцией -A:

Несмотря на то что Bash поддерживает только одномерные массивы, мы можем выполнять симуляцию работы с многомерными матрицами с помощью ассоциативных массивов:

Чтобы удалить массив, созданный с помощью declare используйте функцию unset:

Выводы

В этой статье мы рассмотрели как работают массивы Bash в Linux, как их создавать, а также как использовать. Если разобраться, то здесь нет ничего очень сложного, а массивы могут стать очень важным элементов ваших скриптов.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

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

Запуск скрипта породит следующий вывод:

Читайте также:  Командная оболочка операционной системы linux

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

Источник

Bash Array – How to Declare an Array of Strings in a Bash Script

Veronica Stork

Veronica Stork

Bash Array – How to Declare an Array of Strings in a Bash Script

Bash scripts give you a convenient way to automate command line tasks.

With Bash, you can do many of the same things you would do in other scripting or programming languages. You can create and use variables, execute loops, use conditional logic, and store data in arrays.

While the functionality may be very familiar, the syntax of Bash can be tricky. In this article, you will learn how to declare arrays and then how to use them in your code.

How to Declare an Array in Bash

Declaring an array in Bash is easy, but pay attention to the syntax. If you are used to programming in other languages, the code might look familiar, but there are subtle differences that are easy to miss.

To declare your array, follow these steps:

  1. Give your array a name
  2. Follow that variable name with an equal sign. The equal sign should not have any spaces around it
  3. Enclose the array in parentheses (not brackets like in JavaScript)
  4. Type your strings using quotes, but with no commas between them

Your array declaration will look something like this:

myArray=("cat" "dog" "mouse" "frog")

How to Access an Array in Bash

There are a couple different ways to loop through your array. You can either loop through the elements themselves, or loop through the indices.

Читайте также:  Kali linux nethunter wifi

How to Loop Through Array Elements

To loop through the array elements, your code will need to look something like this:

for str in $; do echo $str done

To break that down: this is somewhat like using forEach in JavaScript. For each string (str) in the array (myArray), print that string.

The output of this loop looks like this:

Note: The @ symbol in the square brackets indicates that you are looping through all of the elements in the array. If you were to leave that out and just write for str in $ , only the first string in the array would be printed.

How to Loop Through Array Indices

Alternatively, you can loop through the indices of the array. This is like a for loop in JavaScript, and is useful for when you want to be able to access the index of each element.

To use this method, your code will need to look something like the following:

for i in $; do echo "element $i is $" done

The output will look like this:

element 0 is cat element 1 is dog element 2 is mouse element 3 is frog

Note: The exclamation mark at the beginning of the myArray variable indicates that you are accessing the indices of the array and not the elements themselves. This can be confusing if you are used to the exclamation mark indicating negation, so pay careful attention to that.

Another note: Bash does not typically require curly braces for variables, but it does for arrays. So you will notice that when you reference an array, you do so with the syntax $ , but when you reference a string or number, you simply use a dollar sign: $i .

Conclusion

Bash scripts are useful for creating automated command line behavior, and arrays are a great tool that you can use to store multiple pieces of data.

Declaring and using them is not hard, but it is different from other languages, so pay close attention to avoid making mistakes.

Veronica Stork

Veronica Stork

Veronica is a librarian by trade with a longtime computer programming habit that she is currently working on turning into a career. She enjoys reading, cats, and programming in React.

If you read this far, tweet to the author to show them you care. Tweet a thanks

Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started

freeCodeCamp is a donor-supported tax-exempt 501(c)(3) charity organization (United States Federal Tax Identification Number: 82-0779546)

Our mission: to help people learn to code for free. We accomplish this by creating thousands of videos, articles, and interactive coding lessons — all freely available to the public. We also have thousands of freeCodeCamp study groups around the world.

Donations to freeCodeCamp go toward our education initiatives, and help pay for servers, services, and staff.

Источник

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