пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
Слишком длинный поисковый запрос.
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Shell-скриптинг – это важный компонент автоматизации процессов в Linux. С помощью сценариев вы можете записать последовательность команд в файл, а затем выполнить их.
Это сэкономит ваше время, так как вам не нужно будет из раза в раз писать одни и те же команды. Вы можете без проблем выполнять какие-то повседневные задачи и даже планировать их автоматическое выполнение.
Кроме того, вы можете настроить некоторые сценарии так, чтобы они выполнялись при запуске, например, чтобы при запуске нового сеанса на экране отображалось определенное сообщение или устанавливались какие-то переменные среды.
Вариантов использования сценариев довольно много, так что давайте рассмотрим их более подробно.
Из этой статьи вы узнаете:
что такое bash-оболочка
что такое bash-сценарий и как его определить
как создать свой первый bash-сценарий и выполнить его
как выглядит базовый синтаксис сценариев оболочки
как просмотреть запланированные сценарии системы
как автоматизировать сценарии путем планирования cron-заданий
Лучший способ изучить что-то – испробовать это на практике. Я настоятельно рекомендую воспользоваться Replit. С его помощью вы сможете быстро получить доступ к запущенной оболочке Linux.
Введение в понятие Bash-оболочки
Работа командной строки Linux осуществляется программой под названием оболочка. Со временем эта программа претерпела различные изменения, дабы приспособиться к различным ситуациям.
Разные пользователи могут использовать разные оболочки. Однако большая часть пользователей предпочитают оставлять текущую оболочку по умолчанию. Для большинства дистрибутивов Linux оболочка по умолчанию – это GNU Bourne-Again Shell (Bash). Преемником bash стала оболочка Bourne (
sh
).
Когда вы запускаете оболочку первый раз, она использует загрузочный сценарий, который расположен в
.bashrc
или
.bash_profile
. С помощью этого сценария вы можете настроить то, как оболочка будет себя вести.
Когда оболочка используется в диалоговом режиме, она отображает на экране значок
$
, что значит, что она ждет команды от пользователя. Этот значок называется приглашением командной строки.
[username@host ~]$
Если оболочка запущена с правами администратора, то значок приглашения меняется на
#
. А приглашение оболочки для привилегированного пользователя выглядит так:
[root@host ~]#
Bash – это довольно мощный инструмент, так как он может упростить определенные операции, выполнение которых с помощью GUI (графический пользовательский интерфейс) будет не таким эффективным. Также не стоит забывать, что большая часть серверов не имеют GUI, так что лучше всего научиться пользоваться возможностями CLI (интерфейс командной строки).
Что такое Bash-сценарий?
Bash-сценарий – это набор команд, записанных в файле. Программа-оболочка (bash) считывает эти команды и выполняет их. Сценарий выполняется строчка за строчкой.
Например, вы можете перейти в какой-то каталог, создать там папку и запустить в ней какой-то процесс с помощью командной строки.
Вы можете сохранить команды в bash-сценарии и, запуская его, выполнять одну и ту же последовательность действий. Запускать сценарий можно любое количество раз.
Как определить Bash-сценарий?
Расширение файла (
.sh
)
Согласно соглашениям о присвоении имен, наименования bash-сценариев должны оканчиваться на
.sh
. При этом bash-сценарии будут отлично работать и без этого расширения.
Сценарии начинаются с шебанга
Помимо этого, сценарии обозначаются с помощью шебанга. Шебанг – это комбинация # (bash) и ! (восклицательный знак), после которых следует путь к оболочке bash. Это должна быть первая сточка сценария. Шебанг указывает оболочке, что сценарий необходимо выполнить в bash-оболочке. Шебанг - это ни что иное, как абсолютный путь к интерпретатору bash.
Ниже приведен пример выражения с шебангом:
#! /bin/bash
Путь к bash-программе может отличаться. Чуть позже мы посмотрим, как его можно определить.
Права исполнения
Сценарии имеют права исполнения для пользователей, которые их выполняют.
Право исполнения обозначается символом
x
. В примере ниже мой пользователь имеет права
rwx
(read, write, execute – чтение, запись, выполнение) для файла
test_script.sh
.
Цвет файла
Исполняемые сценарии выделяются цветом, что выделяет их на фоне остальных файлов и папок.
В данном случае сценарии с правами исполнения выделены зеленым цветом.
Как создать свой первый bash-сценарий
Давайте создадим простой сценарий в bash, который будет выводить
Hello World
.
Создаем файл с названием
hello_world.sh
touch hello_world.sh
Находим путь к bash-оболочке
which bash
В данном случае этот путь выглядит так:
/usr/bin/bash
. И я добавляю его к шебангу.
Пишем команду
Мы хотим отобразить надпись «Hello world» в консоли.
Наш сценарий будет выглядеть примерно так:
#! /usr/bin/bash
echo "Hello World"
Редактируем файл
hello_world.sh
с помощью текстового редактора (на ваш выбор) и добавляем в него строчки, приведенные выше.
Указываем права исполнения для пользователя
Меняем права доступа к файлу и разрешаем выполнение сценария с помощью следующей команды:
chmod u+x hello_world.sh
chmod
меняет существующие права на файл для конкретного пользователя, и мы добавляем
+x
к пользователю
u.
Запускаем сценарий
Мы можем запустить сценарий одним из следующих способов:
./hello_world.sh
bash hello_world.sh.
Вот результат:
Два способа запустить сценарий
Базовый синтаксис bash-сценария
Как и в случае с любым другим языком программирования, при написании bash-сценария необходимо следовать определенному набору правил для того, чтобы создать программу, которую сможет понять компьютер.
Как определить переменные
Мы можем определить переменную с помощью следующего синтаксиса:
variable_name=value
. А для того, чтобы получить значение переменной, мы должны добавить перед ней символ
$
.
#!/bin/bash
# A simple variable example
greeting=Hello
name=Tux
echo $greeting $name
Tux – это имя талисмана Linux, а именно пингвина.
Привет, я - Tux.
Арифметические выражения
Ниже приведен список операторов для математических вычислений, которые поддерживаются bash:
Оператор
Значение оператора
+
сложение
-
вычитание
*
умножение
/
деление
**
возведение в степень
%
абсолютное значение
Давайте запустим несколько примеров.
Обратите внимание на пробелы, они – часть синтаксиса
Кроме того, вы можете вычислить какое-то числовое выражение и сохранить его значение в переменной с помощью следующего синтаксиса:
var=$((expression))
Давайте попробуем на примере.
#!/bin/bash
var=$((3+9))
echo $var
Методы, представленные выше, неправильно вычисляют дроби, они их округляют.
Для
вычислений в десятичных числах
мы можем использовать команду
bc
. С ее помощью мы можем получить вывод с точностью до определенного количества знаков.
bc
(Bash Calculator) – это калькулятор командной строки, который поддерживает вычисления с десятичными числами до определённого количества знаков после запятой.
echo "scale=2;22/7" | bc
Здесь
scale
определяет количество знаков после запятой выходного значения.
Получение результата с точностью до двух знаков после запятой
Как считывать пользовательский ввод
В некоторых случаях вам может потребоваться считать пользовательский ввод и выполнить соответствующие действия.
В bash мы можем получать пользовательский ввод с помощью команды
read
.
read variable_name
Чтобы пользователь получил сообщение в качестве предложения к вводу, добавьте флаг
-p
.
read -p "Enter your age" variable_name
Пример:
#!/bin/bash
echo "Enter a numner"
read a
echo "Enter a numner"
read b
var=$((a+b))
echo $var
Логические операторы для сравнения числовых значений
Сравнения нужны для проверки утверждений на истинность. Для сравнения двух утверждений мы можем использовать следующие операторы:
Оператор
Синтаксис
Описание
Равно
num1 -eq num2
num1
равен
num2
?
Больше или равно
num1 -ge num2
num1
больше или равен
num2
?
Больше
num1 -gt num2
num1
больше
num2
?
Меньше или равно
num1 -le num2
num1
меньше или равен
num2
?
Меньше
num1 -lt num2
num1
меньше
num2
?
Не равно
num1 -ne num2
num1
не равен
num2
?
Синтаксис:
if [ conditions ]
then
commands
fi
Пример:
Давайте сравним два числа и определим, как они соотносятся:
read x
read y
if [ $x -gt $y ]
then
echo X is greater than Y
elif [ $x -lt $y ]
then
echo X is less than Y
elif [ $x -eq $y ]
then
echo X is equal to Y
fi
Результат:
Условные операторы (принятие решений)
Условия – это выражения, которые можно оценить логическими значениями (
true
или
false
). Для проверки условий мы можем использовать следующие конструкции:
if
,
if-else
,
if-elif-else
, а также вложенные условия.
Вот так выглядят условные операторы:
if...then...fi
if...then...else...fi
if..elif..else..fi
if..then..else..if..then..fi..fi..
(вложенные условия)
Синтаксис:
if [[ condition ]]
then
statement
elif [[ condition ]]; then
statement
else
do this by default
fi
Для того, чтобы создавать более содержательные сравнения, мы можем использовать операторы И (
-a
) и ИЛИ (
-o
).
Ниже приведено утверждение, и его можно перевести как «если
a
больше 40, а
b
меньше 6».
if [ $a -gt 40 -a $b -lt 6 ]
Пример
: давайте определим тип треугольника по считанным длинам его сторон.
read a
read b
read c
if [ $a == $b -a $b == $c -a $a == $c ]
then
echo EQUILATERAL
elif [ $a == $b -o $b == $c -o $a == $c ]
then
echo ISOSCELES
else
echo SCALENE
fi
Результат
:
Тестовый пример №1
Тестовый пример №2
Тестовый пример №3
Циклы и обходы
С помощью циклов мы можем выполнять операторы определенное количество раз.
Циклы по числам:
Пример ниже демонстрирует цикл, который повториться 5 раз.
#!/bin/bash
for i in {1..5}
do
echo $i
done
Циклы по строками:
Кроме того, мы можем проходить циклом по строкам.
#!/bin/bash
for X in cyan magenta yellow
do
echo $X
done
Цикл while:
Цикл while проверяет условие и повторяется до тех пор, пока условие не станет истинным. Для управления выполнением цикла мы должны ввести специальный оператор, который будет увеличивать счетчик.
В примере ниже этим специальным оператором является
(( i += 1 ))
. Он увеличивает значение переменной
i
.
Пример:
#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
echo "$i"
(( i += 1 ))
done
Чтение файлов
Предположим, что у нас есть файл
sample_file.txt
, и он выглядит так:
Мы можем читать файл строчка за строчкой и выводить результат на экран.
#!/bin/bash
LINE=1
while read -r CURRENT_LINE
do
echo "$LINE: $CURRENT_LINE"
((LINE++))
done < “sample_file.txt”
Результат:
Строки печатаются вместе с номерами строк
Как выполнять команды с помощью обратных кавычек
Если сценарий предполагает вывод сложной команды, мы можем заключить оператор в обратные кавычки.
Синтаксис
:
var= ` commands `
Пример
: предположим, что мы хотим вывести список точек подключения так, чтобы в их названии присутствовало
tmpfs
. Мы можем выполнить вот такой оператор:
df -h | grep tmpfs
.
Для того, чтобы добавить его в bash-сценарий, нам необходимо заключить его в обратные кавычки.
#!/bin/bash
var=`df -h | grep tmpfs`
echo $var
Результат:
Как получить аргументы для сценария с помощью командной строки
Мы можем передавать аргументы сценарию непосредственно во время его исполнения.
Символы
$@
обозначают позицию параметра, начиная с единицы.
#!/bin/bash
for x in $@
do
echo "Entered arg is $x"
done
Запустим его:
./script arg1 arg2
Как автоматизировать сценарии путем планирования cron-заданий
Cron – это планировщик заданий, присущий Unix-подобным системам. Вы можете составить график выполнения заданий, чтобы они выполнялись ежедневно, еженедельно, ежемесячно или в какое-то определенное время дня. Именно cron-задания лежат в основе автоматизации в Linux.
Ниже приведен синтаксис для планирования cron-заданий:
# Cron job example { // пример планирования cron-задания }
* * * * * sh /path/to/script.sh
В данном случае звездочка (*) обозначает минуты, часы, дни, месяцы и дни недели соответственно.
Ниже приведены несколько примеров планирования cron-заданий.
ГРАФИК
ПОЯСНЕНИЕ
5 0 * 8 *
В 00:05 в августе
5 4 * * 6
В 04:05 в субботу
0 22 * * 1-5
В 22:00 каждый день с понедельника по пятницу
Как проверить сценарии, которые уже есть в системе
С помощью команды
crontab
Команда
crontab -l
перечисляет все уже запланированные сценарии для конкретного пользователя.
Мои запланированные сценарии
С помощью команды
find
Команда
find
помогает находить файлы, исходя из заданных шаблонов. Так как большая часть сценариев заканчивается на
.sh
, то мы можем найти сценарий примерно таким образом:
find . -type f -name "*.sh"
где:
точка (
.
) обозначает текущий каталог. Вы можете изменить этот путь.
-type f
указывает на тип файла, который мы ищем, - текстовый.
*.sh
указывает, что файл должен заканчиваться на
.sh
.
Заключение
В этой статье мы рассмотрели основы shell-скриптинга. Мы изучили синтаксис и разобрали примеры, которые могут помочь вам писать более серьезные программы.
Программирование — это не просто набор команд для компьютера, а целая система для написания кода. Один из самых популярных методов — объектно-ориентированное программирование (ООП). Такой подход помогает создавать удобные, масштабируемые и понятные программы. В нашей статье разберем, что такое ООП, его ключевые принципы, преимущества и примеры использования в языках программирования.
Что такое ООП и почему это важно?
Объектно-ориентированное программирование (ООП) — это стиль написания кода, который делает программы удобными, понятными и структурированными. Если говорить простыми словами, ООП позволяет вам работать не с голыми данными и функциями, а с объектами — сущностями, у которых есть свойства и действия.
Представьте, что вы создаете игру, и у вас есть персонажи. У каждого персонажа есть имя, здоровье, броня и оружие. Они могут атаковать, защищаться и лечиться. Если бы мы писали игру без ООП, нам пришлось бы держать кучу переменных вроде hero_name, hero_health, hero_weapon и функций attack(hero), defend(hero). В итоге код превращается в хаос, особенно если персонажей становится больше.
С ООП мы просто создаем класс Character, в котором описываем все нужные параметры и действия. А потом создаем из него конкретных персонажей.
Основные понятия ООП
Класс – это шаблон, по которому создаются объекты. Представьте, что это чертеж машины: он определяет, какие детали у нее будут (свойства) и что она сможет делать (методы).
Объект – это конкретный экземпляр класса. Например, у вас есть класс Car, а объекты – это «Toyota», «BMW» и так далее.
Свойства (атрибуты) – это характеристики объекта. Например, у автомобиля есть цвет, мощность двигателя и объем бака.
Методы – это действия, которые объект может выполнять. Для машины это «завестись», «поехать» или «остановиться».
Конструктор (__init__) – это специальный метод, который автоматически вызывается при создании объекта. Он инициализирует свойства объекта.
Экземпляр класса – это просто другой способ назвать объект. Когда мы создаем объект из класса, говорят, что это «экземпляр класса».
Интерфейс – это набор методов, которые должен реализовать класс. Например, если у нас есть интерфейс Animal, то все животные должны уметь make_sound().
Модификаторы доступа (public, private, protected) – они определяют, какие свойства и методы можно использовать вне класса.
Принципы объектно-ориентированного программирования
Выделяют 4 ключевых принципа, которые делают ООП удобным и мощным. Разберем каждый из них.
1. Инкапсуляция — это ограничение доступа к данным объекта и управление их изменением через специально предусмотренные методы. Вся информация, необходимая для работы объекта, должна храниться внутри него, а внешние классы не могут напрямую изменять эти данные.
Для чего нужна: защищает данные от случайных или преднамеренных изменений и уменьшает зависимость между частями кода, снижая риск ошибок.
2. Наследование – это когда один класс берет свойства и методы другого. Например, у вас есть класс Animal, а от него наследуются Dog и Cat, которые уже имеют свои особенности.
Зачем оно нужно: позволяет повторно использовать код и упрощает расширение функциональности классов.
3. Полиморфизм означает, что один и тот же метод может работать по-разному в зависимости от объекта, который его вызывает.
Для чего нужен: позволяет работать с разными объектами через единый интерфейс и облегчает расширение кода без его переписывания.
4. Абстракция позволяет скрыть сложные детали реализации и оставить только важные характеристики объекта. Мы создаем общий класс, который определяет структуру, но сам не используется напрямую.
Зачем это нужно? Абстракция упрощает код, оставляя только важные детали, а также определяет, какие методы должны быть обязательно реализованы в дочерних классах.
Плюсы и минусы ООП
Преимущества
Недостатки
Код удобно организован
Программу легче структурировать, так как каждая сущность представлена в виде отдельного объекта со своими свойствами и методами. Это делает код более читаемым и логичным.
«Лишний» код
Чтобы создать объект, нужно сначала написать класс, его свойства, методы, конструкторы. Для маленьких проектов это может быть лишним усложнением.
Код можно использовать повторно
Благодаря наследованию и абстракции, можно не писать одни и те же функции заново, а использовать готовые классы и переопределять только нужные методы.
Производительность
Из-за большого количества классов, объектов и их взаимодействий, программы на ООП могут работать медленнее,
Гибкость и расширяемость
Если нужно изменить или добавить новую логику, не придется переписывать весь код. Достаточно изменить или добавить новый класс.
Сложность в освоении
Для новичков концепции ООП (инкапсуляция, наследование, полиморфизм) могут быть сложными, особенно если до этого человек работал только с простыми функциями и переменными.
Безопасность
Можно скрыть важные детали реализации и открывать доступ только к тем данным, которые действительно нужны. Это предотвращает случайное изменение важных данных.
Трудности с изменением кода
Если проект сильно запутан, менять код становится сложно. Порой проще написать всё заново, чем разбираться в наследовании и связях между классами.
Масштабируемость
Принципы ООП применяются в крупных проектах, так как позволяют разбивать код на независимые модули. Их легко поддерживать и расширять.
Не подходит для маленьких проектов
ООП отлично подходит для больших проектов, но для маленьких задач его использование может быть неоправданным усложнением.
Итог
Объектно-ориентированное программирование — полезный инструмент, который помогает организовать код, сделать его гибким и удобным для поддержки. Его можно эффективно внедрить в сложный проект с множеством сущностей, когда важна безопасность данных и возможность масштабирования.
Однако ООП подходит не всегда. В небольших скриптах или в задачах его использование может быть лишним. Главное — применять этот подход осознанно, когда он действительно упрощает разработку, а не усложняет её.
Привет, друзья! В том году мы уже публиковали топ-25 самых популярных, а следовательно ненадежных и плохих, паролей за 2018 год. А теперь посмотрим, что изменилось за этот год. И, надеемся, что вы не увидели в этом списке ваш пароль!
Топ 25 худших паролей за 2019 год
ПозицияПароль112345212345631234567894test15password6123456787zinch8g_czechout9asdf10qwerty11123456789012123456713Aa12345614iloveyou15123416abc123171111111812312319dubsmash20test21princess22qwertyuiop23sunshine24BvtTest1232511111
В 2019 году произошло много утечек данных, которые затронули миллиарды пользователей Интернета. В связи с тем, что взлом данных становится все более распространенным явлением, интернет-пользователи должны больше внимания уделять кибербезопасности.
Самые популярные пароли содержат все очевидные и легко угадываемые комбинации чисел (12345,111111,123321), популярные женские имена (Николь, Джессика, Ханна) и просто строки букв, образующие горизонтальную или вертикальную линию на клавиатуре QWERTY (asdfghjkl) , qazwsx, 1qaz2wsx).
Год за годом мы видим одни и те же пароли в верхней части списка «худших паролей». Почему люди продолжают использовать их? Все просто - большинство людей предпочитают использовать слабые пароли, а не напрягаться, пытаясь придумать и запомнить длинные и сложные. Зачастую это означает что они используют один и тот же пароль для разных учетных записей. И если один пароль утекает в результате взлома, то хакеры получают доступ ко всем остальным учетным записям.
Решение проблемы
Однако проблему простых и одинаковых паролей можно решить довольно просто. Чтобы придумать сложный пароль воспользуйтесь нашим генератором устойчивых паролей.
Сгенерировать
Отлично, мы получили сложный и длинный пароль, но его сложно запомнить. Что же делать? Тут на помощь приходят менеджеры для хранения паролей, их сейчас очень много. Например можно воспользоваться KeePass, про который у нас есть статья в которой мы рассказываем что это такое и как этим пользоваться.
