Введение
В этой лабораторной работе вы научитесь сравнивать массивы в сценариях Shell. Массивы — это полезные структуры данных для хранения нескольких значений, а их сравнение является распространенной задачей в программировании. Вы будете работать с тремя массивами и разработаете скрипт для поиска общих элементов между ними. Этот процесс поможет вам освоить манипуляции с массивами, использование циклов и условных операторов в Shell.
Создание файла скрипта
Для начала создадим новый файл для нашего сценария.
Откройте терминал в WebIDE. Вы увидите командную строку, заканчивающуюся символом
$.Перейдите в каталог проекта:
cd ~/project
Эта команда меняет текущую рабочую директорию на папку проекта. Символ ~ обозначает ваш домашний каталог, а /project — это подпапка внутри него.
- Создайте новый файл с именем
array-comparison.sh:
touch array-comparison.sh
Команда touch создает пустой файл. Если файл уже существует, она просто обновит время его последнего изменения, не затрагивая содержимое.
- Откройте файл в редакторе WebIDE. Это можно сделать, щелкнув по имени файла в проводнике слева.
Добавление шебанга и инициализация массивов
Теперь приступим к написанию кода: добавим шебанг и инициализируем наши массивы.
- Добавьте следующее содержимое в файл
array-comparison.sh:
#!/bin/bash
## Initialize the arrays
a=(3 5 8 10 6)
b=(6 5 4 12)
c=(14 7 5 7)
Разберем, что здесь происходит:
- Первая строка
#!/bin/bashназывается шебангом (shebang). Она указывает системе, что для выполнения этого скрипта нужно использовать интерпретатор Bash. Эта строка критически важна для любого shell-скрипта. - Затем мы инициализируем три массива:
a,bиc. В Bash массивы определяются путем заключения элементов в круглые скобки()через пробел. - Каждый массив содержит набор целых чисел. Мы будем использовать их для поиска пересекающихся значений.
Реализация первого цикла сравнения
Реализуем первый цикл сравнения, чтобы найти общие элементы между массивами a и b.
Добавьте следующий код в ваш скрипт:
## Initialize an array to store common elements between a and b
z=()
## Compare arrays a and b
for x in "${a[@]}"; do
for y in "${b[@]}"; do
if [ $x = $y ]; then
z+=($x)
fi
done
done
echo "Common elements between a and b: ${z[@]}"
Подробное объяснение кода:
z=()инициализирует пустой массивzдля хранения найденных общих элементов.for x in "${a[@]}"— это цикл, который перебирает каждый элемент массиваa. Синтаксис"${a[@]}"разворачивается во все элементы массива.- Внутри него находится вложенный цикл
for y in "${b[@]}", который перебирает каждый элемент массиваb. if [ $x = $y ]проверяет, совпадает ли текущий элемент изaс текущим элементом изb.- Если они равны, мы добавляем этот элемент в массив
zс помощью конструкцииz+=($x). - В конце мы выводим найденные элементы с помощью
echo "Common elements between a and b: ${z[@]}". Синтаксис${z[@]}позволяет вывести все содержимое массиваz.
Реализация второго цикла сравнения
Теперь реализуем второй цикл сравнения, чтобы найти общие элементы между массивом c и результатами предыдущего сравнения, сохраненными в массиве z.
Добавьте следующий код в скрипт:
## Initialize an array to store common elements among a, b, and c
j=()
## Compare array c with the common elements found in z
for i in "${c[@]}"; do
for k in "${z[@]}"; do
if [ $i = $k ]; then
j+=($i)
fi
done
done
echo "Common elements among a, b, and c: ${j[@]}"
Этот код работает аналогично предыдущему, но с небольшими отличиями:
- Мы инициализируем новый пустой массив
jдля хранения итоговых общих элементов. - Внешний цикл
for i in "${c[@]}"перебирает элементы массиваc. - Внутренний цикл
for k in "${z[@]}"перебирает элементы, которые оказались общими дляaиb. - Мы сравниваем элементы из
cс элементами изz, и при совпадении добавляем их в массивj. - В завершение выводится список элементов, которые присутствуют во всех трех массивах.
Настройка прав доступа и запуск скрипта
Теперь, когда скрипт готов, нам нужно сделать его исполняемым и запустить.
- В терминале установите права на выполнение:
chmod +x ~/project/array-comparison.sh
Команда chmod изменяет права доступа к файлу. Опция +x добавляет право на выполнение, что позволяет запускать файл как программу.
- Запустите скрипт:
~/project/array-comparison.sh
Эта команда выполняет ваш сценарий. Часть ~/project/ указывает точный путь к файлу.
Вы должны увидеть вывод, похожий на этот:
Common elements between a and b: 5 6
Common elements among a, b, and c: 5
Этот результат подтверждает, что:
- Общими элементами для массивов
aиbявляются 5 и 6. - Единственным общим элементом для всех трех массивов (
a,bиc) является 5.
Если вы не видите такого вывода или получили ошибку, внимательно проверьте код на наличие опечаток или пропущенных символов.
Резюме
В этой лабораторной работе вы научились сравнивать массивы в Shell. Вы создали скрипт, который находит общие элементы в трех массивах, используя вложенные циклы и условные операторы. В ходе выполнения упражнения были продемонстрированы ключевые концепции Shell-программирования:
- Создание и инициализация массивов.
- Использование вложенных циклов для сопоставления данных.
- Применение условных операторов для проверки равенства.
- Динамическое добавление элементов в массив.
- Управление правами доступа и запуск скриптов.
эти навыки являются фундаментальными для Shell-скриптинга и могут быть применены в будущем для решения более сложных задач по обработке данных. Помните, что практика — залог успеха. Попробуйте изменить скрипт, чтобы он работал с другими данными или находил уникальные элементы вместо общих. Удачи в программировании!



