Слайд 2Сценарии командной строки — это наборы тех же самых команд, которые можно
вводить с клавиатуры, собранные в файлы и объединённые некоей общей целью. При этом результаты работы команд могут представлять либо самостоятельную ценность, либо служить входными данными для других команд.
Сценарии — это мощный способ автоматизации часто выполняемых действий.
Слайд 3Как устроены bash-скрипты
Создайте пустой файл с использованием команды touch.
#!/bin/bash
В других строках этого
файла символ решётки используется для обозначения комментариев, которые оболочка не обрабатывает.
#!/bin/bash
# This is a comment
pwd
Whoami
Слайд 4Установка разрешений для файла сценария
Попытка запуска файла сценария с неправильно настроенными разрешениями
.
Слайд 5#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged
in is:"
whoami
Слайд 6Использование переменных
Переменные позволяют хранить в файле сценария информацию, например — результаты работы
команд для использования их другими командами.
Существуют два типа переменных, которые можно использовать в bash-скриптах:
Переменные среды
Пользовательские переменные
#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"
Слайд 8Пользовательские переменные
Bash-скрипты позволяют задавать и использовать в сценарии собственные переменные. Подобные переменные
хранят значение до тех пор, пока не завершится выполнение сценария.
#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"
Слайд 9Математические операции
Для выполнения математических операций в файле скрипта можно использовать конструкцию вида $((a+b)):
#!/bin/bash
var1=$((
5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2
Слайд 10Управляющая конструкция if-then
Управляющая конструкция if-then. В наиболее простом виде она выглядит так:
if команда
then
команды
fi
А
вот рабочий пример:
#!/bin/bash
if pwd
then
echo "It works"
fi
Слайд 11Управляющая конструкция if-then-else
Для того, чтобы программа смогла сообщить и о результатах успешного
поиска, и о неудаче, воспользуемся конструкцией if-then-else. Вот как она устроена:
if команда
then
команды
else
команды
fi
Слайд 13Задание 1:
Ввести числовую переменную.
Если переменная больше 5 то вывести на экран «The
test value <переменная> is greater than 5» иначе «The test value <переменная> is not greater than 5»
Слайд 14Сравнение строк
str1 = str2 Проверяет строки на равенство, возвращает истину, если строки идентичны;
str1
!= str2Возвращает истину, если строки не идентичны;
str1 < str2Возвращает истину, если str1меньше, чем str2;
str1 > str2 Возвращает истину, если str1больше, чем str2;
-n str1 Возвращает истину, если длина str1больше нуля;
-z str1Возвращает истину, если длина str1равна нулю.
Слайд 15#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user is the current logged
in user"
fi
Слайд 16Циклы for
Базовая структура таких циклов:
for var in list
do
команды
Done //дан
В
каждой итерации цикла в переменную var будет записываться следующее значение из списка list
Слайд 17Перебор простых значений
Перебор списка простых значений
#!/bin/bash
for var in first second third fourth
fifth
do
echo The $var item
done
Слайд 18Перебор сложных
#!/bin/bash
for var in first "the second" "the third" "I’ll do
it"
do
echo "This is: $var"
done
Слайд 19Инициализация цикла списком, полученным из результатов работы команды
#!/bin/bash
file="myfile"
for var in $(cat
$file)
do
echo " $var"
done
Слайд 20Разделители полей
Причина вышеописанной особенности заключается в специальной переменной окружения, которая называется IFS
(Internal Field Separator) и позволяет указывать разделители полей. По умолчанию оболочка bash считает разделителями полей следующие символы:
Пробел
Знак табуляции
Знак перевода строки
IFS=$'\n'
Слайд 21Циклы for в стиле C
for (i = 0; i < 10; i++)
{
printf("number
is %d\n", i);
}
Схема цикла выглядит так:
for (( начальное значение переменной ; условие окончания цикла; изменение переменной ))
На bash это можно записать так:
for (( a = 1; a < 10; a++ ))
Пример:
#!/bin/bash
for (( i=1; i <= 10; i++ ))
do
echo "number is $i"
done