Similar presentations:
324osnovyskriptinganabashipowershell
1.
ingacademy.ruОсновы скриптинга
на bash и PowerShell
Лекция. Модуль 3. Тема 3
2.
ingacademy.ruЛекция. Модуль 3. Тема 3
Учебные вопросы
Основы скриптинга на bash
Основы скриптинга на powershell
2
3.
ingacademy.ruЛекция. Модуль 3. Тема 3
Первый учебный вопрос
Основы скриптинга на bash
Основы скриптинга на powershell
3
4.
Лекция. Модуль 3. Тема 3ingacademy.ru
Подготовка рабочего окружения
Поскольку Bash является не только командной оболочкой, но и скриптовым языком программирования, то
мы можем автоматизировать некоторые наши действия. Например, мы можем написать скрипт, который
будет создавать нам папку, затем копировать туда важные директории и файлы. Делаться все это будет
запуском одной утилиты, а не поочередным вводом соответствующих команд в терминал.
Возможности самописных утилит ограничены лишь фантазией автора и возможностями языка.
Однако какую бы утилиту вы не придумали, скорее всего, вам потребуется использовать различные
специальные языковые конструкции для ее корректной работы.
Поэтому прежде чем писать такие утилиты, необходимо познакомиться и разобраться с такими
конструкциями.
Для комфортной работы, с помощью ранее изученных
команд, создадим отдельную папку с названием Bash Scripts
и в ней создадим файл first_scripts.sh
Выдадим права на исполнение файла.
4
5.
ingacademy.ruЛекция. Модуль 3. Тема 3
Шебанг и запуск скриптов
С помощью консольного текстового редактора nano, мы можем открыть
этот файл и записать в него наш первый скрипт
Скрипт, открытый
в текстовом редакторе nano
#! /bin/bash
whoami
Чтобы сохранить изменения, нужно нажать CTRL + O и затем Enter, а чтобы выйти
из редактора нужно нажать CTRL + X и Enter.
Первая строка в скрипте - это шебанг. Он не обязателен, но служит для того,
чтобы когда пользователь запускал программу через ./, она запускалась
правильно. То есть, если у нас в шебанге прописано #!/bin/bash, то скрипт
запускается, как баш-скрипт. Шебанг используется для того, чтобы определить
через какую программу запустить скрипт, в данном случае прописан путь к Bash,
следовательно, вот такой запуск ./first_script.sh аналогичен запуску /bin/bash
first_script.sh (так нужно было запустить без шебанга).
После шебанга, у нас идет сам скрипт, в данном случае он состоит
только из команды whoami и при запуске исполняет только её
Результат работы скрипта
5
6.
Лекция. Модуль 3. Тема 3ingacademy.ru
Попытка запустить скрипт python без
шебанга
Большинство командных оболочек
при использовании ./first_script.sh без
шебанга все равно запустят его, как
Bash, но будут проблемы, если у вас код,
например, на Python.
При этом, добавив шебанг с путем к
Python 3, код начинает правильно
работать:
6
7.
ingacademy.ruЛекция. Модуль 3. Тема 3
Постановка задачи для написания
скрипта
Формулировка задачи
Написать многозадачный скрипт, который в зависимости
от запроса пользователя будет выводить:
Имя системы, ее id и имя текущего пользователя;
Локальный IP-адрес системы
Содержимое файла /etc/passwd
Для реализации поставленной задачи необходимо:
Обрабатывать пользовательский ввод и запоминать значения, введенные пользователем;
В зависимости от введенного пользователем значения выполнять разные функции.
7
8.
Лекция. Модуль 3. Тема 2ingacademy.ru
Обработка пользовательского ввода.
Конструкция read и работа с переменными
Для обработки пользовательского ввода в bash предусмотрена специальная конструкция read. Она берет строку
данных, которую ввел пользователь и передает переменной, которая стоит за ней.
Синтаксис конструкции выглядит следующим образом:
read <имя_переменной>
В скриптовых языках программирования рекомендуется называть переменные по их назначению, чтобы другие
пользователи, когда будут использовать данный скрипт, могли легко понять, для чего используется та или иная
переменная.
Таким образом, если мы обрабатываем вводимые данные, где пользователю предлагается сделать какой-то выбор,
переменную можно назвать “choice” - выбор.
read choice
Чтобы вывести значение переменной в терминал, можно воспользоваться командой echo с указанием имени
переменной
8
9.
Лекция. Модуль 3. Тема 3ingacademy.ru
Пользовательский интерфейс
Однако это мы с вами, являясь разработчиками, знаем, что должна делать наша утилита. Поэтому когда при ее запуске
система запрашивает у нас ввод каких-то данных, мы сразу пониманием, что это за данные.
Но нашу утилиту могут использовать и другие пользователи, не знающие ее исходного кода. Чтобы всем было
понятно, что делает утилита на каждом шаге, необходимо работать с пользовательским интерфейсом.
Например, прежде чем запросить какие-то данные, необходимо в терминал сообщить пользователю, что за данные
мы у него запрашиваем
9
10.
ingacademy.ruЛекция. Модуль 3. Тема 3
Конструкция if-then-else-then-fi
Для реализации операции ветвления почти во всех скриптовых языках программирования предусмотрена
конструкция if - else.
Синтаксис данной конструкции в bash следующий^
if [ <условие> ]
then
<действие>
else
Эта строка задает действие, которое будет
осуществлено при выполнении первого условия
Эта строка задает условие: “Все, что не попадает в if”
then
<действие>
fi
Эта строка задает основное условие
Эта строка задает действие, которое будет выполнено в
случае, если условие в if не выполняется
Эта строка означает конец синтаксической конструкции
10
11.
ingacademy.ruЛекция. Модуль 3. Тема 3
Конструкция if-then-elif-then-else-then-fi
Данную конструкцию можно уточнить с использованием специальной синтаксической единицы elif
If [ <условие> ]
then
<действие>
elif [ <условие2> ]
then
<действие>
Эта строка задает условие, которое проверяется в
случае, если не выполнено первое условие
Эта строка задает действие, которое будет
выполняться при соблюдении второго условия
else
<действие>
fi
Синтаксических конструкций elif может
быть любое количество
11
12.
Лекция. Модуль 3. Тема 3ingacademy.ru
Конструкция if-then-elif-then-else-then-fi
Простой пример использования конструкции if-then-elif-then-else-then-fi
#! /bin/bash
echo "Input userdata"
read choice
if [ $choice -gt 5 ]
then
echo "Число больше 5"
elif [ $choice -eq 5 ]
then
echo "Число равно 5"
elif [ $choice -gt 0 ]
then
echo "Число больше 0 и меньше 5"
elif [ $choice -eq 0 ]
then
echo "Число равно 0"
else
echo "Число меньше 0 или это не число"
fi
12
13.
Лекция. Модуль 3. Тема 3ingacademy.ru
Специальные операторы для математических
операций в bash
В скрипте были использованы операции сравнения -eq и -gt.
Это специальные языковые конструкции bash для работы с математическими операторами.
Ниже приведены остальные операторы сравнения Bash:
eq - равно - аналог ==
ne - не равно - аналог !=
gt - больше - аналог >
ge - больше или равно - аналог >=
lt - меньше - аналог <
le - меньше или равно - аналог <=
13
14.
ingacademy.ruЛекция. Модуль 3. Тема 3
Вариант кода для скрипта из задачи
Часть 1
#! /bin/bash
echo "__________________________________"
echo "This is really good multitool!"
echo "Please, select a function"
echo "[1] Hostname, id, whoami"
echo "[2] My local IP:"
echo "[3] Check /etc/passwd"
echo "_________________________________"
echo "[0] exit"
Часть 2
if [ $choice -eq 1 ]
then
echo "____________"
echo -n "Your hostname is: "
hostname
echo -n "Your ID is: "
id
echo -n "Whoami: "
whoami
echo "___________"
Часть 3
elif [ $choice -eq 3 ]
then
echo "__________"
cat /etc/passwd
echo "__________"
elif [ $choice -eq 0 ]
then
echo "Good Bye"
else
echo -n "->"
read choice
elif [ $choice -eq 2 ]
then
echo "__________"
echo -n "Your local IP: "
ip r | grep eth0
echo "__________"
echo "Bad case"
fi
При переносе скрипта вставлять части друг за другом по очереди в один файл
14
15.
Лекция. Модуль 3. Тема 3ingacademy.ru
Пример работы скрипта (1/4)
15
16.
Лекция. Модуль 3. Тема 3ingacademy.ru
Пример работы скрипта (2/4)
16
17.
Лекция. Модуль 3. Тема 3ingacademy.ru
Пример работы скрипта (3/4)
17
18.
Лекция. Модуль 3. Тема 3ingacademy.ru
Пример работы скрипта (4/4)
18
19.
ingacademy.ruЛекция. Модуль 3. Тема 3
Конструкция case
Помимо конструкции if-then-elif-then-else для реализации ветвления в bash существует конструкция case
case <условие> in
<результат_1>)
<действие>
;;
<результат_2>)
<действие>
;;
*)
<действие>
;;
esac
В данном случае * - это все то, для
чего не определены “кейсы”.
19
20.
ingacademy.ruЛекция. Модуль 3. Тема 3
Вариант кода для скрипта из задачи через case
Часть 1
#! /bin/bash
echo "__________________________________"
echo "This is really good multitool!"
echo "Please, select a function"
echo "[1] Hostname, id, whoami"
echo "[2] My local IP:"
echo "[3] Check /etc/passwd"
echo "_________________________________"
echo "[0] exit"
echo -n "->"
read choice
Часть 2
case $choice in
1)
echo "____________"
echo -n "Your hostname is: "
hostname
echo -n "Your ID is: "
id
echo -n "Whoami: "
whoami
echo "___________"
;;
2)
echo "__________"
echo -n "Your local IP: "
ip r | grep eth0
echo "__________"
;;
Часть 3
3)
echo "__________"
cat /etc/passwd
echo "__________"
;;
0)
echo "Good Bye"
break
;;
*)
echo "Bad case"
;;
esac
При переносе скрипта вставлять части друг за другом по очереди в один файл
20
21.
ingacademy.ruЛекция. Модуль 3. Тема 3
Циклы
При реализации программ может возникать необходимость “зациклить” некоторое действие, т.е. повторить его более
одного раза.
Самый простой пример, повторять какое-то действие, пока в памяти есть место, далее необходимо прекратить
операцию.
Для этого в bash используются циклы for, while, until.
Цикл for перебирает все значения
из массива или использует
переменную-счетчик для
количества повторения цикла
for <переменная> in
<список>
do
<действие>
done
Цикл while выполняется пока
условие истино
Цикл until выполняется пока
условие ложно
while [ условие ]
do
<действие>
done
until [ условие ]
do
<действие>
done
21
22.
ingacademy.ruЛекция. Модуль 3. Тема 3
Доработанный скрипт с помощью циклов
Часть 1
#! /bin/bash
echo "__________________________________"
echo "This is really good multitool!"
echo "Please, select a function"
echo "[1] Hostname, id, whoami"
echo "[2] My local IP:"
echo "[3] Check /etc/passwd"
echo "_________________________________"
echo "[0] exit"
while [ 1 ]
do
echo -n "->"
read choice
Часть 2
case $choice in
1)
echo "____________"
echo -n "Your hostname is: "
hostname
echo -n "Your ID is: "
id
echo -n "Whoami: "
whoami
echo "___________"
;;
2)
echo "__________"
echo -n "Your local IP: "
ip r | grep eth0
echo "__________"
;;
Часть 3
3)
echo "__________"
cat /etc/passwd
echo "__________"
;;
0)
echo "Good Bye"
break
;;
*)
echo "Bad case"
;;
esac
done
При переносе скрипта вставлять части друг за другом по очереди в один файл
22
23.
ingacademy.ruЛекция. Модуль 3. Тема 3
Второй учебный вопрос
Основы скриптинга на bash
Основы скриптинга на powershell
23
24.
Лекция. Модуль 3. Тема 3ingacademy.ru
Особенности скриптинга в PowerShell (1/3)
Изначально функция запуска сценариев без цифровой подписи отсутствует:
Но есть два варианта запуска скриптов, либо подписать скрипт, либо понизить уровень безопасности. В
случае, если нужно понизить уровень безопасности, то нужно открыть PowerShell от имени
администратора и прописать данную команду:
24
25.
Лекция. Модуль 3. Тема 3ingacademy.ru
Особенности скриптинга в PowerShell (2/3)
Теперь скрипт может быть запущен:
Код функции, которая просто выводит “Hello World!”:
25
26.
Лекция. Модуль 3. Тема 3ingacademy.ru
Особенности скриптинга в PowerShell (3/3)
Также в скрипт PowerShell, как и в скрипт Bash можно добавлять различные встроенные функции (whoami,
copy, move, type и др.), которые будут работать:
Переменные в PS объявляются и используется практически также, как и в Bash:
26
27.
ingacademy.ruЛекция. Модуль 3. Тема 3
Дополнительные команды и синтаксис
типовых конструкций в PowerShell
Операции сравнения в Powershell такие же, как и в Bash. Также в PS команда echo является алиасом(можно сказать
макросом) для Write-Output.
Вот еще список дополнительных команд, которые могут помочь в администрировании:
Get-PSDrive - посмотреть, какие диски есть в системе
Get-Process - получить список процессов
else
if ( <условие> ) {
<действие>
} elseif ( <условие> ) {
<действие>
} else {
<действие>
}
switch
swith ( <условие>)
{
<результат1> { <действие1> }
<результат2> { <действие2> }
<результат3> { <действие3> }
<результат4> { <действие4> }
}
while
while ( <условие> ) {
<действие>
}
for
for (<счетчик>; <условие>;
<кол-во_повторений>)
{
<действие>
}
27