5 Shell-скриптов для новичков в Linux для изучения программирования в оболочке
Если вы новичок в Linux, изучение shell-сценариев может показаться поначалу сложной задачей. Тем не менее, shell-сценарии могут стать невероятно полезным навыком при работе с системами Linux. Сценарии оболочки могут автоматизировать повторяющиеся задачи, выполнять задачи системного администрирования и даже помогать в разработке программного обеспечения.
В этой статье мы рассмотрим пять сценариев оболочки, которые могут изучить новички в Linux, чтобы начать работу с программированием оболочки. Мы рассмотрим некоторые основы shell-сценариев и приведем примеры каждого из них, чтобы помочь вам понять, как они работают.
Что такое Shell Scripting?
Сценарий оболочки – это программа, написанная на языке сценариев, которая запускается в оболочке Unix/Linux. Сценарии оболочки – это мощный инструмент, который позволяет автоматизировать задачи, выполнять задачи системного администрирования и даже создавать программное обеспечение.
Сценарии оболочки выполняются в интерфейсе командной строки и могут использоваться для выполнения широкого спектра задач, от базового управления файлами до сложной обработки данных.
Сценарий 1: Hello World
Первый скрипт, который изучает каждый программист, – это классическая программа “Hello, World!”. Это простой скрипт, который просто печатает сообщение на экране. Вот как выглядит скрипт –
Пример
#!/bin/bash
echo "Hello, World!"
Выход
Hello, World!
Первая строка скрипта называется “shebang”, она указывает оболочке, какой интерпретатор использовать для выполнения скрипта. В данном случае мы используем оболочку bash.
Вторая строка – это собственно команда, которая выводит сообщение на экран. Команда echo просто отображает текст, который следует за ней.
Чтобы запустить скрипт, сохраните его в файл (например, hello.sh), сделайте его исполняемым с помощью команды chmod +x hello.sh, а затем запустите его с помощью команды ./hello.sh.
Скрипт 2: Простой калькулятор
Следующий скрипт, который мы рассмотрим, – это простой калькулятор. Этот скрипт принимает от пользователя два числа и выполняет над ними базовую арифметическую операцию. Вот как выглядит скрипт –
Пример
#!/bin/bash
echo "Enter first number: "
read num1
echo "Enter second number: "
read num2
echo "The sum is: $((num1 + num2))"
Выход
Enter first number:
Enter second number:
The sum is: 0
Первые две строки скрипта предлагают пользователю ввести два числа, а затем считывают эти числа в переменные num1 и num2.
Третья строка выполняет фактическое вычисление. В данном случае мы складываем num1 и num2, используя синтаксис $(( )).
Чтобы запустить скрипт, сохраните его в файл (например, calculator.sh), сделайте его исполняемым с помощью команды chmod +x calculator.sh, а затем запустите его с помощью команды ./calculator.sh.
Скрипт 3: Резервное копирование файлов
Следующий сценарий, который мы рассмотрим, – это сценарий резервного копирования файлов. Этот скрипт копирует файл в каталог резервного копирования и добавляет временную метку к имени файла. Вот как выглядит сценарий –
#!/bin/bash
backup_dir=/path/to/backup/dir/
filename=file.txt
cp $filename $backup_dir/${filename}_$(date +%Y-%m-%d_%H-%M-%S)
Первая строка скрипта устанавливает переменную backup_dir в путь к каталогу резервных копий.
Вторая строка устанавливает переменную filename в имя файла, который мы хотим сохранить.
Третья строка копирует файл в резервную директорию с помощью команды cp. Синтаксис {filename}{filename}(date +%Y-%m-%d_%H-%M-%S) добавляет временную метку в конец имени файла, чтобы каждая резервная копия имела уникальное имя.
Чтобы запустить скрипт, сохраните его в файл (например, backup.sh), сделайте его исполняемым с помощью команды chmod +x backup.sh, а затем запустите его с помощью команды ./backup.sh.
Сценарий 4: Информация о системе
Следующий скрипт, который мы рассмотрим, – это скрипт системной информации. Этот скрипт отображает информацию о системе, такую как операционная система, версия ядра и информация о процессоре. Вот как выглядит сценарий –
Пример
#!/bin/bash
echo "Operating system: $(uname -o)"
echo "Kernel version: $(uname -r)"
echo "CPU information: $(lscpu | grep "Model name" | awk '{print $3, $4, $5, $6, $7, $8}')"
Выход
Operating system: GNU/Linux
Kernel version: 5.15.0-60-generic
CPU information: AMD Ryzen 9 5950X 16-Core Processor
Давайте разберем это на части. первая строка скрипта – это строка shebang, как обычно.
Следующие три строки используют различные команды для отображения информации о системе. команда uname -o отображает операционную систему, команда uname -r отображает версию ядра, а lscpu | grep “Model name” | awk ‘{print 3,4, 5,6, 7,8}’ выводит информацию о процессоре.
Чтобы запустить скрипт, сохраните его в файл (например, systeminfo.sh), сделайте его исполняемым с помощью команды chmod +x systeminfo.sh, а затем запустите его с помощью команды ./systeminfo.sh.
Скрипт 5: Генератор паролей
Последний скрипт, который мы рассмотрим, – это генератор паролей. Этот скрипт генерирует случайный пароль, используя комбинацию заглавных и строчных букв, цифр и специальных символов. Вот как выглядит сценарий –
Выход
#!/bin/bash
length=12
password=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=' | fold -w $length | head -n 1)
echo "Your new password is: $password"
Выход
Your new password is: YRY+zm:<JwYi
Давайте разберем это на части. Первая строка скрипта – это строка shebang, как обычно.
Вторая строка устанавливает переменную length в желаемую длину пароля.
Третья строка генерирует случайный пароль с помощью команды cat /dev/urandom | tr -dc ‘a-zA-Z0-9!@#length | head -n 1. Эта команда использует команду cat /dev/urandom для генерации случайных данных, а затем с помощью команды tr отфильтровывает ненужные символы. Команда fold -w $length разбивает вывод на строки нужной длины, а команда head -n 1 выделяет первую строку (т. е. пароль).
Чтобы запустить скрипт, сохраните его в файл (например, password.sh), сделайте его исполняемым с помощью команды chmod +x password.sh, а затем запустите его с помощью команды ./password.sh.
Scritp 6: Поиск файлов
Скрипт, позволяющий искать файлы в каталоге или подкаталогах по ключевому слову. Вот пример –
#!/bin/bash
echo "Enter directory to search: "
read dir
echo "Enter keyword to search for: "
read keyword
find $dir -name "*$keyword*" -print
Этот сценарий предлагает пользователю ввести каталог и ключевое слово для поиска, а затем использует команду find для поиска файлов с этим ключевым словом в их именах.
Сценарий 7: Резервное копирование каталогов
Сценарий, создающий резервную копию всей директории (включая поддиректории и файлы) в резервное место. Вот пример –
#!/bin/bash
src_dir=/path/to/src/dir/
backup_dir=/path/to/backup/dir/
tar -czf $backup_dir/backup_$(date +%Y-%m-%d_%H-%M-%S).tar.gz $src_dir
Этот сценарий задает переменные для исходного и резервного каталогов, а затем с помощью команды tar создает сжатый архив исходного каталога в резервном каталоге, с временной меткой в имени файла.
Сценарий 8: Мониторинг процессов
Скрипт, который следит за определенным процессом и отправляет предупреждение, если процесс перестает выполняться. Вот пример –
#!/bin/bash
process_name=myprocess
while true
do
if ps aux | grep $process_name | grep -v grep > /dev/null
then
sleep 1
else
echo "$process_name has stopped running."
mail -s "Process Monitor Alert" user@example.com <<< "$process_name has stopped running."
break
fi
done
Этот скрипт использует цикл while для непрерывной проверки запущенности процесса с определенным именем с помощью команды ps. Если процесс не запущен, скрипт отправляет оповещение по электронной почте указанному пользователю с помощью команды mail.
Scritp 9: Веб-скраппинг
Сценарий, который извлекает данные с веб-сайта и сохраняет их в файле или базе данных. Вот пример использования команд curl и grep –
#!/bin/bash
url="http://example.com"
data=$(curl -s $url)
echo $data | grep -oP '(?<=).*?(?=)' > title.txt
Этот скрипт использует команду curl для получения HTML-содержимого веб-страницы, а затем с помощью grep извлекает тег title и сохраняет его в файл.
Сценарий 10: Автоматизация SSH
Скрипт, автоматизирующий вход в систему по SSH и выполнение команд на удаленных серверах. Вот пример использования команды sshpass –
#!/bin/bash
server="example.com"
username="user"
password="password"
command="ls"
sshpass -p $password ssh $username@$server $command
Этот скрипт использует команду sshpass для автоматизации входа в систему SSH и выполнения команды на удаленном сервере без участия пользователя.
Сценарий 11: Резервное копирование базы данных
Скрипт, выполняющий резервное копирование базы данных MySQL и загружающий ее на удаленный сервер. Вот пример с использованием команды mysqldump и команды rsync.
#!/bin/bash
db_name="mydb"
db_user="user"
db_password="password"
backup_dir="/path/to/backup/dir/"
backup_file="$backup_dir/backup_$(date +%Y-%m-%d_%H-%M-%S).sql"
mysqldump -u $db_user -p$db_password $db_name > $backup_file
rsync -avz $backup_dir user@example.com:/path/to/remote/dir/
Этот скрипт использует команду mysqldump для создания резервной копии базы данных MySQL и сохранения ее в файл с временной меткой в имени. Затем он использует команду rsync для загрузки файла резервной копии на удаленный сервер.
Заключени
Сценарии Shell – это мощный инструмент, который может помочь вам автоматизировать задачи, выполнять задачи системного администрирования и даже создавать программное обеспечение. Сценарии, которые мы рассмотрели в этой статье, – это лишь вершина айсберга, когда речь идет о сценариях Shell, но они должны дать вам хорошую основу для создания собственных сценариев.
Помните, что практика делает совершенным, поэтому не бойтесь экспериментировать с различными командами и сценариями, чтобы увидеть, что работает лучше всего. Счастливых сценариев!