SlideShare a Scribd company logo
1 of 60
Download to read offline
Bash scripting. Advanced.
Введение в GNU/LiNUX
Linux administration course.
May 5, 2020
1 Manipulate the different I/O streams with I/O Redirection
2 Repeat operations with loops.
3 Group pieces of code.
4 Expansions cont.
5 if alternatives.
6 Debugging scripts.
7 Command types.
Linux administration course. 1
1 Manipulate the different I/O streams with I/O Redirection
2 Repeat operations with loops.
3 Group pieces of code.
4 Expansions cont.
5 if alternatives.
6 Debugging scripts.
7 Command types.
Linux administration course. 2
stdin, stdout, stderr
C каждым процессом связаны потоки ввода‑вывода ‑ файловые
дeскрипторы stdin, stdout, stderr.
Пример. Номера файловых дeскрипторов и устройств.
1 echo / dev / std*
2 echo / dev / std* | xargs −t −n 1 readlink
3 lsof −ap $BASHPID −d 0 ,1 ,2
Linux administration course. 2
Конвееры
STDIN process
STDERR
STDOUT
• Каждое приложение открывает 3 стандартных файловых
дескриптора (file descriptor) stdin (fd 0), stdout(fd 1), stderr
(fd 2)
Linux administration course. 3
Конвееры
STDIN process STDIN processSTDIN process
STDERR
STDERR
STDERR
STDOUT STDOUTSTDOUT
• Каждое приложение открывает 3 стандартных файловых
дескриптора (file descriptor) stdin (fd 0), stdout(fd 1), stderr
(fd 2)
• Приложения могут работать как фильтр из STDIN в
STDOUT, можно объединять несколько приложений в
конвейер
• Синтаксис <app1> | <app2>
Linux administration course. 3
Перенаправления в файл
• Перенаправление stdout FD=1
• С созданием нового файла
command > file или command 1> file
Например cat file1 file2 > file3
• С дополнением существующего
command >> file
Linux administration course. 4
Перенаправления в файл
• Перенаправление stdout FD=1
• С созданием нового файла
command > file или command 1> file
Например cat file1 file2 > file3
• С дополнением существующего
command >> file
• Перенаправления stdin FD=0
command < file или command <&0 file
Linux administration course. 4
Перенаправления в файл
• Перенаправление stdout FD=1
• С созданием нового файла
command > file или command 1> file
Например cat file1 file2 > file3
• С дополнением существующего
command >> file
• Перенаправления stdin FD=0
command < file или command <&0 file
• Перенаправления stderr FD=2
command1 2>&1 | command2
command 1>file 2>&1
command 2>file 1>&2
Linux administration course. 4
Применение перенаправления потоков.
Работает с любым типом файлов.
• Создать новый файл или обнулить сущствующий >
• Перенаправить длинный вывод команды в файл >
• Молчаливое выполнение команды >/dev/null
• Чтение из спецфайла </dev/urandom, /dev/zero
• Чтение из данных из файла <
• Настройка системы. echo > определенные файлы в /proc/
или /sys/
• cat /dev/zero > /dev/sda ‑ удалить систему
Linux administration course. 5
1 Manipulate the different I/O streams with I/O Redirection
2 Repeat operations with loops.
3 Group pieces of code.
4 Expansions cont.
5 if alternatives.
6 Debugging scripts.
7 Command types.
Linux administration course. 6
Основные конструкции для циклов
• for ‑ цикл просмотра (foreach), цикл со счетчиком
• while, until ‑ цикл с предусловием
• break, continue ‑ досрочный выход, пропуск итерации
Linux administration course. 6
Циклы for. Примеры.
Действие над файлами.
1 f o r file in *
2 do md5sum $file
3 done
Перечисление элементов.
1 f o r planet in Mars Earth Mercury Saturn
2 do ssh $planet uname −a > $planet
3 done
Linux administration course. 7
Циклы for. Цифровая последовательность.
Примеры генерации.
1 f o r num in 1 2 3 4 5 6 7 8 9 10 # простое
перечисление
2 do ping 1 9 2 . 1 6 8 . 1 0 . $num
3 done
4
5 f o r num in $ ( seq 1 10) # генерация из внешней
команды
6 do ping 1 9 2 . 1 6 8 . 1 0 . $num
7 done
8
9 f o r num in { 1 . . 1 0 } # генерация встроенными
средствами
10 do ping 1 9 2 . 1 6 8 . 1 0 . $num
11 done
Linux administration course. 8
Циклы for. Цифровая последовательность.
Арифметический формат (C‑like)
1 f o r ( ( i =1; i <11; i ++) )
2 do
3 echo $i
4 done
Несколько переменных
1 f o r ( ( a =1 , b =1; a <= LIMIT ; a ++ , b ++) )
2 do
3 echo −n ”$a−$b”
4 done
Linux administration course. 9
Циклы for. Выход из цикла.
Пустые выражения. Результат по умолчанию 1.
1 f o r ( ( i =1; ; i ++) )
2 do
3 echo $i
4 [ ” $ i ” −eq 10 ] && break
5 done
Linux administration course. 10
Циклы while,until
1 while expr1 ; . . . exprN
2 do
3 op
4 done
Применяются когда нужно повторять до выполнения какого‑то
события, когда количество элементов неизвестно заранее
либо изменяется динамически.
Например oкончание файла, получен последний аргумент
командной строки, ввод текста пользователем, ожидание хоста
в сети после презагрузки.
Linux administration course. 11
Примеры использования while
Перебираем аргументы.
1 while [ [ −n $1 ] ]
2 do
3 echo $1
4 s h i f t # rename the p o s i t i o n a l parameters
$N +1 , $N+2 . . . to $1 , $2 (N=1)
5 done
Linux administration course. 12
IFS ‑ internal field separator
IFS
Переменная, регулирующая разделение параметров
(аргументов) на слова.
Используется:
• во время раскрытия параметров командной строки перед
выполнением
• редактирование командной строки (удаление слова,
Ctrl+W)
• чтение ввода пользователя командной read
Значение по умолчанию: "<пробел><табуляция><перевод
строки> "
Linux administration course. 13
Перенаправление из цикла.
Парсер.
1 while IFS=” : ” read name pass uid guid comment
home shell ; do
2 echo $name $uid $guid $home $shell
3 done < / etc / passwd
Построчное чтение из файла.
1 while IFS= read −r line ; do
2 printf ’%s  n ’ ” $ l i n e ”
3 done < ” $ f i l e ”
Linux administration course. 14
Внешние команды.
Массовые операции с файлами аналог циклов
Команда find
1 find . −name ’ *. c ’ −exec stat { }  ;
Команда xargs
1 echo / dev / std* | xargs −n1 readlink
Linux administration course. 15
Цикл until. Пример.
Ожидаем хост после перезагрузки.
1 u n t i l ping −q −c 3 $host 1 >/ dev / null 2>&1 &&
nc −z $host 22
2 do
3 sleep 1
4 echo unavailable ;
5 done
6
Linux administration course. 16
1 Manipulate the different I/O streams with I/O Redirection
2 Repeat operations with loops.
3 Group pieces of code.
4 Expansions cont.
5 if alternatives.
6 Debugging scripts.
7 Command types.
Linux administration course. 17
Функции
• Именованные
• Неименованные
Функции в shell могут использоваться как обычные программы,
которые:
• Принимают позиционные параметры;
• возвращают статус;
• Могут использоваться в качестве источника либо
приемника при перенаправлениях ввода/вывода.
Linux administration course. 17
Функции: синтаксис
• Классический синаксис c ключевым словом function:
1 function function_name {
2 command . . .
3 }
• Портабельный (C‑style):
1 function_name ( )
2 {
3 command . . .
4 }
• Однострочный:
1 function_name ( ) { command . . . ; }
Linux administration course. 18
Пример (начало)
1 # ! / bin / bash
2
3 function help {
4 echo ”Использование : $0 < string >”
5 e x i t 1
6 }
7
8 f1 ( ) {
9 echo Вызвана функция $FUNCNAME с $# аргументами
10 }
11
12 f2 ( ) {
13 while read str ; do
14 echo $ { FUNCNAME } : прочитана строка : $str
15 done
16 }
Linux administration course. 19
Пример (окончание)
1 [ $# −eq 0 ] && help
2
3 f1 ”$@”
4
5 { f o r ( ( i =0; i <5; i ++) ) ; do
6 echo $@
7 done } | f2
8
9 e x i t
Linux administration course. 20
Локальные переменные
Переменные объявленные с префиксом local видны только
внутри объявленного блока.
1 # ! / bin / bash
2
3 VAR= t e s t
4 f1 ( ) {
5 l o c a l VAR=test1
6 echo Function $ {
FUNCNAME } : VAR=$VAR
7 }
8 f2 ( ) {
9 VAR=test2
10 echo Function $ {
FUNCNAME } : VAR=$VAR
11 }
1 echo Before f1 : VAR=$VAR
2 f1
3 echo Before f2 : VAR=$VAR
4 f2
5 echo After f2 : VAR=$VAR
6
7 e x i t
Linux administration course. 21
1 Manipulate the different I/O streams with I/O Redirection
2 Repeat operations with loops.
3 Group pieces of code.
4 Expansions cont.
5 if alternatives.
6 Debugging scripts.
7 Command types.
Linux administration course. 22
Подстановка ‑ домашняя директория
Tilde expansion ~
1 echo ~
2 echo ~ / . ssh
3 echo $HOME / . ssh
4 echo ~test01 / . ssh /
Linux administration course. 22
Подстановка ‑ домашняя директория
Tilde expansion ~
1 echo ~
2 echo ~ / . ssh
3 echo $HOME / . ssh
4 echo ~test01 / . ssh /
• ~ ‑ сокращение $HOME
• ~user/ ‑ $HOME для пользователя user
• / ‑ символ завершает действие ~
Широко применяется в скриптах, на страницах документации
Linux administration course. 22
Подстановка команд
Синтаксис:
•  ̀command ̀
• $(command)
Linux administration course. 23
Подстановка команд
Синтаксис:
•  ̀command ̀
• $(command)
Задание
Присвоить переменной LIST результат выполнения команды ls
-1
Вывести на экран переменную LIST
Linux administration course. 23
Спецсимволы
• # – Вся строка после # является комментарием
• ; – Разделение команд
• : – NOP оператор (похож на встроенный вызов true)
• source или . – скрипт выполняется в текущем экземпляре
shell
Linux administration course. 24
1 Manipulate the different I/O streams with I/O Redirection
2 Repeat operations with loops.
3 Group pieces of code.
4 Expansions cont.
5 if alternatives.
6 Debugging scripts.
7 Command types.
Linux administration course. 25
Управляющие операторы
Можно делать цепочки команд:
command1 && command2 || command3
command1 && command2 && command3 && ...
Применение операторов && и ||:
• Изменяют поведение кода в зависимости от успешности
выполнения команд
• Объединяют команды
• Улучшают читаемость кода для простых проверок. Одна
строка vs три в if
• Но длинные цепочки сложно отлаживать и поддерживать
Linux administration course. 25
Command chain example
It only takes three commands to install Gentoo
Linux administration course. 26
Command chain example
It only takes three commands to install Gentoo
1 cfdisk / dev / hda && mkfs . xfs / dev / hda1 &&
mount / dev / hda1 / mnt / gentoo / && chroot / mnt
/ gentoo / && env−update && . / etc / profile &&
emerge sync && cd / usr / portage && scripts /
bootsrap . sh && emerge system && emerge vim
&& vi / etc / fstab && emerge gentoo−dev−
sources && cd / usr / src / linux && make
menuconfig && make install modules_install
&& emerge gnome mozilla−firefox openoffice
&& emerge grub && cp / boot / grub / grub . conf .
sample / boot / grub / grub . conf && vi / boot /
grub / grub . conf && grub && init 6
Linux administration course. 26
Command chain example
It only takes three commands to install Gentoo
1 cfdisk / dev / hda && mkfs . xfs / dev / hda1 &&
mount / dev / hda1 / mnt / gentoo / && chroot / mnt
/ gentoo / && env−update && . / etc / profile &&
emerge sync && cd / usr / portage && scripts /
bootsrap . sh && emerge system && emerge vim
&& vi / etc / fstab && emerge gentoo−dev−
sources && cd / usr / src / linux && make
menuconfig && make install modules_install
&& emerge gnome mozilla−firefox openoffice
&& emerge grub && cp / boot / grub / grub . conf .
sample / boot / grub / grub . conf && vi / boot /
grub / grub . conf && grub && init 6
That is the first one
Linux administration course. 26
Условные операторы && ||
Выполнить команды:
1 cd video && echo Exit code $? Is OK . I am
watching video .
2 mkdir video # запустить предыдущую команду еще
раз
Linux administration course. 27
Условные операторы && ||
Выполнить команды:
1 cd video && echo Exit code $? Is OK . I am
watching video .
2 mkdir video # запустить предыдущую команду еще
раз
Синтаксис:
command1 && command2
Oболочка выполняет command2 если успешно выполнилась
command1. Логическая операция И (AND)
Linux administration course. 27
Условные операторы && ||
Выполнить команды:
1 cd video && echo Exit code $? Is OK . I am
watching video .
2 mkdir video # запустить предыдущую команду еще
раз
Синтаксис:
command1 && command2
Oболочка выполняет command2 если успешно выполнилась
command1. Логическая операция И (AND)
Выполнить команды:
Linux administration course. 27
Условные операторы && ||
Выполнить команды:
1 cd video && echo Exit code $? Is OK . I am
watching video .
2 mkdir video # запустить предыдущую команду еще
раз
Синтаксис:
command1 && command2
Oболочка выполняет command2 если успешно выполнилась
command1. Логическая операция И (AND)
Выполнить команды:
1 cd video | | echo Exit code $ ? . Video is not
available
2 rmdir video # Удалим и повторим еще раз первую
команду .
Linux administration course. 27
Условные операторы && ||
Выполнить команды:
1 cd video && echo Exit code $? Is OK . I am
watching video .
2 mkdir video # запустить предыдущую команду еще
раз
Синтаксис:
command1 && command2
Oболочка выполняет command2 если успешно выполнилась
command1. Логическая операция И (AND)
Выполнить команды:
1 cd video | | echo Exit code $ ? . Video is not
available
2 rmdir video # Удалим и повторим еще раз первую
команду .
Linux administration course. 27
1 Manipulate the different I/O streams with I/O Redirection
2 Repeat operations with loops.
3 Group pieces of code.
4 Expansions cont.
5 if alternatives.
6 Debugging scripts.
7 Command types.
Linux administration course. 28
Включение режима отладки I
Используется команда set для активизации различных
режимов работы bash.
Включение режима производится с помощью ”‑”,
а отключение – ”+”.
Linux administration course. 28
Включение режима отладки II
Примеры включения режима отладки.
1 bash −x . / script . sh # опция командной строки
2
3 # ! / bin / bash −x # внутри скрипта опцией
4 [ . . script . . ]
5
6 # ! / usr / bin / env bash
7 set −x # внутри скрипта командой
8
9 # ! / usr / bin / env bash
10 [ . . irrelevant code . . ]
11 set −x # включаем отладку на часть кода
12 [ . . relevant code . . ]
13 set +x # выключаем отладку
14 [ . . irrelevant code . . ]
Linux administration course. 29
Ключи отладки команды set I
• set -v – вывод на экран исполняемой строки
1 set −v
2 echo $HOME
• set -x – вывод на экран исполняемой строки с
автоматической подстановкой значений переменных
1 set −x
2 echo $HOME
• set -n – проверка синтаксиса скрипта
1 bash −n t e s t . sh
Linux administration course. 30
Ключи отладки команды set II
• set -f – отключение генерации имен файлов с
использованием метасимволов (globbing)
1 echo ~ / . *
2 set −f
3 echo ~ / . *
Linux administration course. 31
Ключи отладки команды set III
• set -e – остановка выполнения скрипта, если какая‑либо
команда возвращяет errorstatus не равный 0
1 # ! / bin / bash
2
3 set −e
4 f a l s e | | true
5 echo Working
6 f a l s e
7 echo Still working
Linux administration course. 32
Отладочные переменные
$LINENO номер текущей строки
$FUNCNAME массив содержит имена всех функций из
стека вызовов. 0 элемент имя текущей
функции
$BASH_SOURCE массив содержит имена подключенных
файлов source
$SHLVL уровень вложенности интерпретатора
$PIPESTATUS массив статусов завершения всех команд
в pipe
Альтернативный вид PS4.
1 export PS4= ’ +( $ { BASH_SOURCE } : $ { LINENO } ) : $ {
FUNCNAME [ 0 ] : + $ {FUNCNAME [ 0 ] } ( ) : } ’
Linux administration course. 33
Стек вызовов
• caller [N] – функция выводит на экран номер строки,
имена функции и файла вызывающего скрипта
1 # ! / bin / bash
2 backtrace ( ) {
3 echo Backtrace :
4 f o r ( ( i=$SHLVL ; i >=0; i−−)) ; do
5 c a l l e r $i
6 done
7 }
8 f1 ( ) { echo Function $FUNCNAME at $LINENO &&
backtrace ; }
9 f2 ( ) { f1 ; }
10 f2
Linux administration course. 34
Типичные ошибки в условном выражении
Написать скрипт прнимающий один аргумент и
определяющий файл ли это. Если файл выводить на экран
строку ’regular file detected’ в случае успеха, Предварительно
создать: файлы c именами file, my file
check.sh ‑ исправить
1 filename=$1
2
3 [−f $filename ] && echo ” regular f i l e detected ”
| | echo ” not regular f i l e ”
4 e x i t # to run code below comment i t
5 # or v a r i a n t with i f
6 i f [−f $filename ] ; then
7 echo ’ re g ular f i l e detected
8 else
9 echo ” not regular f i l e ”
Linux administration course. 35
Сообщения об ошибках
Пример.
1 check . sh : line 4 : [−f : command not found
2
3 check . sh : line 4 : [ : missing ] ’
4
5 . / check . sh # i n c o r r e c t code l o g i c . No
arguments .
6 re g ular f i l e detected
7
8 . / check . sh : l i n e 5 : [ : my: binary operator
expected
9
10 . / check . sh : l i n e 112: syntax e r r o r : unexpected
end of f i l e
11
12 bash : t e s t : too many argumentsLinux administration course. 36
1 Manipulate the different I/O streams with I/O Redirection
2 Repeat operations with loops.
3 Group pieces of code.
4 Expansions cont.
5 if alternatives.
6 Debugging scripts.
7 Command types.
Linux administration course. 37
Запуск программы из командной строки
• Находим приглашение командной строки $, #, user@host: $
• Вводим имя команды, аргументы и запускаем на
выполнение нажатием <Enter>
Что такое команды?
• исполняемая программа (бинарный файл, скрипт)
• встроенные в оболочку команды (shell built‑ins)
• функция оболочки
• сокращение команды (an alias)
Linux administration course. 37
Задание. Виды команд в оболочке
Команда type отображает тип команды. Выполним ее для
различных команд.
1 type type cd help a l i a s read
2 type dmesg rm
3 type i f
4 type −a ls
5 type −a echo pwd t e s t
Два типа команд. А оно нам надо? Есть ли разница?
Linux administration course. 38
Задание. Виды команд в оболочке
Команда type отображает тип команды. Выполним ее для
различных команд.
1 type type cd help a l i a s read
2 type dmesg rm
3 type i f
4 type −a ls
5 type −a echo pwd t e s t
Два типа команд. А оно нам надо? Есть ли разница?
Встроенные и внешние команды
• всегда присутствуют в интерпретаторе, внешних может и
не быть на диске
• однообразный синтаксис на разных платформах
(переносимость скриптов)
• как правило выполняются быстрее, т.к. код находится в
памяти
• есть средства, чтобы выключить встроенные команды,Linux administration course. 38
Условные операторы: case
1 case ” $ v a r i a b l e
” in
2 pattern1 )
command1
3
command2
4 ; ;
5 pattern2 |
pattern3 )
6
command3
7
command4
8 ; ;
9 esac
Linux administration course. 39
Условные операторы: case
1 case ” $ v a r i a b l e
” in
2 pattern1 )
command1
3
command2
4 ; ;
5 pattern2 |
pattern3 )
6
command3
7
command4
8 ; ;
9 esac
Пример:
1 # ! / bin / bash
2
3 cmd=$1 ; var=$2
4 case ”$cmd” in
5 −−print|−−echo )
6 echo ”Ура , печатаем ! ” ; ;
7 abc *| xyz *)
8 echo ”Странная команда $cmd”
; ;
9 *)
10 echo ”Я таких команд не
знаю : $cmd” 1>&2
11 e x i t 1 ; ;
12 esac
13 [ ! −z ” $var ” ] && echo ”
переменная  $var = $var ”
14 e x i t 0Linux administration course. 39

More Related Content

What's hot

"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)AvitoTech
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаSergey Platonov
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерамиДмитрий Столяров
 
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовБыстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовFuenteovejuna
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Badoo Development
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Yauheni Akhotnikau
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6Technopark
 
Linux basics. Занятие 3.
Linux basics. Занятие 3. Linux basics. Занятие 3.
Linux basics. Занятие 3. Vikentsi Lapa
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package managercorehard_by
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Minsk Linux User Group
 
Asynchrony and coroutines
Asynchrony and coroutinesAsynchrony and coroutines
Asynchrony and coroutinescorehard_by
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
 
Lightweight Static Analysis for Data Race Detection in Operating System Kernels
Lightweight Static Analysis for Data Race Detection in Operating System KernelsLightweight Static Analysis for Data Race Detection in Operating System Kernels
Lightweight Static Analysis for Data Race Detection in Operating System KernelsIosif Itkin
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3 phpclub
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9Technopark
 

What's hot (20)

"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерами
 
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовБыстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
 
Docker networking
Docker networkingDocker networking
Docker networking
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6
 
Linux basics. Занятие 3.
Linux basics. Занятие 3. Linux basics. Занятие 3.
Linux basics. Занятие 3.
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех
 
Asynchrony and coroutines
Asynchrony and coroutinesAsynchrony and coroutines
Asynchrony and coroutines
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
 
Lightweight Static Analysis for Data Race Detection in Operating System Kernels
Lightweight Static Analysis for Data Race Detection in Operating System KernelsLightweight Static Analysis for Data Race Detection in Operating System Kernels
Lightweight Static Analysis for Data Race Detection in Operating System Kernels
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
 
Testing C code with Python
Testing C code with PythonTesting C code with Python
Testing C code with Python
 
Coroutines
CoroutinesCoroutines
Coroutines
 
Perl in da shell
Perl in da shellPerl in da shell
Perl in da shell
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 

Similar to 08 linux-course

Romanova techforum bash
Romanova techforum bashRomanova techforum bash
Romanova techforum bashkuchinskaya
 
Scripting languages
Scripting languagesScripting languages
Scripting languagesLev Panov
 
Операционные системы и среды
Операционные системы и средыОперационные системы и среды
Операционные системы и средыAlexandr Konfidentsialno
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
Филипп Синицин - Системы контроля версий
Филипп Синицин - Системы контроля версийФилипп Синицин - Системы контроля версий
Филипп Синицин - Системы контроля версийYandex
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS Pavel Tsukanov
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP languageVladimir Burdaev
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Операционные системы
Операционные системыОперационные системы
Операционные системыyaevents
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Nikita Borzykh
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practiceAlexey Lesovsky
 

Similar to 08 linux-course (20)

Romanova techforum bash
Romanova techforum bashRomanova techforum bash
Romanova techforum bash
 
PowerShell
PowerShellPowerShell
PowerShell
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
 
Операционные системы и среды
Операционные системы и средыОперационные системы и среды
Операционные системы и среды
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
Филипп Синицин - Системы контроля версий
Филипп Синицин - Системы контроля версийФилипп Синицин - Системы контроля версий
Филипп Синицин - Системы контроля версий
 
Кратко о Linux
Кратко о LinuxКратко о Linux
Кратко о Linux
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.
 
Linux (pipes)
Linux (pipes) Linux (pipes)
Linux (pipes)
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP language
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Операционные системы
Операционные системыОперационные системы
Операционные системы
 
Enter: legacy code
Enter: legacy codeEnter: legacy code
Enter: legacy code
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
Git for you
Git for youGit for you
Git for you
 

08 linux-course

  • 1. Bash scripting. Advanced. Введение в GNU/LiNUX Linux administration course. May 5, 2020
  • 2. 1 Manipulate the different I/O streams with I/O Redirection 2 Repeat operations with loops. 3 Group pieces of code. 4 Expansions cont. 5 if alternatives. 6 Debugging scripts. 7 Command types. Linux administration course. 1
  • 3. 1 Manipulate the different I/O streams with I/O Redirection 2 Repeat operations with loops. 3 Group pieces of code. 4 Expansions cont. 5 if alternatives. 6 Debugging scripts. 7 Command types. Linux administration course. 2
  • 4. stdin, stdout, stderr C каждым процессом связаны потоки ввода‑вывода ‑ файловые дeскрипторы stdin, stdout, stderr. Пример. Номера файловых дeскрипторов и устройств. 1 echo / dev / std* 2 echo / dev / std* | xargs −t −n 1 readlink 3 lsof −ap $BASHPID −d 0 ,1 ,2 Linux administration course. 2
  • 5. Конвееры STDIN process STDERR STDOUT • Каждое приложение открывает 3 стандартных файловых дескриптора (file descriptor) stdin (fd 0), stdout(fd 1), stderr (fd 2) Linux administration course. 3
  • 6. Конвееры STDIN process STDIN processSTDIN process STDERR STDERR STDERR STDOUT STDOUTSTDOUT • Каждое приложение открывает 3 стандартных файловых дескриптора (file descriptor) stdin (fd 0), stdout(fd 1), stderr (fd 2) • Приложения могут работать как фильтр из STDIN в STDOUT, можно объединять несколько приложений в конвейер • Синтаксис <app1> | <app2> Linux administration course. 3
  • 7. Перенаправления в файл • Перенаправление stdout FD=1 • С созданием нового файла command > file или command 1> file Например cat file1 file2 > file3 • С дополнением существующего command >> file Linux administration course. 4
  • 8. Перенаправления в файл • Перенаправление stdout FD=1 • С созданием нового файла command > file или command 1> file Например cat file1 file2 > file3 • С дополнением существующего command >> file • Перенаправления stdin FD=0 command < file или command <&0 file Linux administration course. 4
  • 9. Перенаправления в файл • Перенаправление stdout FD=1 • С созданием нового файла command > file или command 1> file Например cat file1 file2 > file3 • С дополнением существующего command >> file • Перенаправления stdin FD=0 command < file или command <&0 file • Перенаправления stderr FD=2 command1 2>&1 | command2 command 1>file 2>&1 command 2>file 1>&2 Linux administration course. 4
  • 10. Применение перенаправления потоков. Работает с любым типом файлов. • Создать новый файл или обнулить сущствующий > • Перенаправить длинный вывод команды в файл > • Молчаливое выполнение команды >/dev/null • Чтение из спецфайла </dev/urandom, /dev/zero • Чтение из данных из файла < • Настройка системы. echo > определенные файлы в /proc/ или /sys/ • cat /dev/zero > /dev/sda ‑ удалить систему Linux administration course. 5
  • 11. 1 Manipulate the different I/O streams with I/O Redirection 2 Repeat operations with loops. 3 Group pieces of code. 4 Expansions cont. 5 if alternatives. 6 Debugging scripts. 7 Command types. Linux administration course. 6
  • 12. Основные конструкции для циклов • for ‑ цикл просмотра (foreach), цикл со счетчиком • while, until ‑ цикл с предусловием • break, continue ‑ досрочный выход, пропуск итерации Linux administration course. 6
  • 13. Циклы for. Примеры. Действие над файлами. 1 f o r file in * 2 do md5sum $file 3 done Перечисление элементов. 1 f o r planet in Mars Earth Mercury Saturn 2 do ssh $planet uname −a > $planet 3 done Linux administration course. 7
  • 14. Циклы for. Цифровая последовательность. Примеры генерации. 1 f o r num in 1 2 3 4 5 6 7 8 9 10 # простое перечисление 2 do ping 1 9 2 . 1 6 8 . 1 0 . $num 3 done 4 5 f o r num in $ ( seq 1 10) # генерация из внешней команды 6 do ping 1 9 2 . 1 6 8 . 1 0 . $num 7 done 8 9 f o r num in { 1 . . 1 0 } # генерация встроенными средствами 10 do ping 1 9 2 . 1 6 8 . 1 0 . $num 11 done Linux administration course. 8
  • 15. Циклы for. Цифровая последовательность. Арифметический формат (C‑like) 1 f o r ( ( i =1; i <11; i ++) ) 2 do 3 echo $i 4 done Несколько переменных 1 f o r ( ( a =1 , b =1; a <= LIMIT ; a ++ , b ++) ) 2 do 3 echo −n ”$a−$b” 4 done Linux administration course. 9
  • 16. Циклы for. Выход из цикла. Пустые выражения. Результат по умолчанию 1. 1 f o r ( ( i =1; ; i ++) ) 2 do 3 echo $i 4 [ ” $ i ” −eq 10 ] && break 5 done Linux administration course. 10
  • 17. Циклы while,until 1 while expr1 ; . . . exprN 2 do 3 op 4 done Применяются когда нужно повторять до выполнения какого‑то события, когда количество элементов неизвестно заранее либо изменяется динамически. Например oкончание файла, получен последний аргумент командной строки, ввод текста пользователем, ожидание хоста в сети после презагрузки. Linux administration course. 11
  • 18. Примеры использования while Перебираем аргументы. 1 while [ [ −n $1 ] ] 2 do 3 echo $1 4 s h i f t # rename the p o s i t i o n a l parameters $N +1 , $N+2 . . . to $1 , $2 (N=1) 5 done Linux administration course. 12
  • 19. IFS ‑ internal field separator IFS Переменная, регулирующая разделение параметров (аргументов) на слова. Используется: • во время раскрытия параметров командной строки перед выполнением • редактирование командной строки (удаление слова, Ctrl+W) • чтение ввода пользователя командной read Значение по умолчанию: "<пробел><табуляция><перевод строки> " Linux administration course. 13
  • 20. Перенаправление из цикла. Парсер. 1 while IFS=” : ” read name pass uid guid comment home shell ; do 2 echo $name $uid $guid $home $shell 3 done < / etc / passwd Построчное чтение из файла. 1 while IFS= read −r line ; do 2 printf ’%s n ’ ” $ l i n e ” 3 done < ” $ f i l e ” Linux administration course. 14
  • 21. Внешние команды. Массовые операции с файлами аналог циклов Команда find 1 find . −name ’ *. c ’ −exec stat { } ; Команда xargs 1 echo / dev / std* | xargs −n1 readlink Linux administration course. 15
  • 22. Цикл until. Пример. Ожидаем хост после перезагрузки. 1 u n t i l ping −q −c 3 $host 1 >/ dev / null 2>&1 && nc −z $host 22 2 do 3 sleep 1 4 echo unavailable ; 5 done 6 Linux administration course. 16
  • 23. 1 Manipulate the different I/O streams with I/O Redirection 2 Repeat operations with loops. 3 Group pieces of code. 4 Expansions cont. 5 if alternatives. 6 Debugging scripts. 7 Command types. Linux administration course. 17
  • 24. Функции • Именованные • Неименованные Функции в shell могут использоваться как обычные программы, которые: • Принимают позиционные параметры; • возвращают статус; • Могут использоваться в качестве источника либо приемника при перенаправлениях ввода/вывода. Linux administration course. 17
  • 25. Функции: синтаксис • Классический синаксис c ключевым словом function: 1 function function_name { 2 command . . . 3 } • Портабельный (C‑style): 1 function_name ( ) 2 { 3 command . . . 4 } • Однострочный: 1 function_name ( ) { command . . . ; } Linux administration course. 18
  • 26. Пример (начало) 1 # ! / bin / bash 2 3 function help { 4 echo ”Использование : $0 < string >” 5 e x i t 1 6 } 7 8 f1 ( ) { 9 echo Вызвана функция $FUNCNAME с $# аргументами 10 } 11 12 f2 ( ) { 13 while read str ; do 14 echo $ { FUNCNAME } : прочитана строка : $str 15 done 16 } Linux administration course. 19
  • 27. Пример (окончание) 1 [ $# −eq 0 ] && help 2 3 f1 ”$@” 4 5 { f o r ( ( i =0; i <5; i ++) ) ; do 6 echo $@ 7 done } | f2 8 9 e x i t Linux administration course. 20
  • 28. Локальные переменные Переменные объявленные с префиксом local видны только внутри объявленного блока. 1 # ! / bin / bash 2 3 VAR= t e s t 4 f1 ( ) { 5 l o c a l VAR=test1 6 echo Function $ { FUNCNAME } : VAR=$VAR 7 } 8 f2 ( ) { 9 VAR=test2 10 echo Function $ { FUNCNAME } : VAR=$VAR 11 } 1 echo Before f1 : VAR=$VAR 2 f1 3 echo Before f2 : VAR=$VAR 4 f2 5 echo After f2 : VAR=$VAR 6 7 e x i t Linux administration course. 21
  • 29. 1 Manipulate the different I/O streams with I/O Redirection 2 Repeat operations with loops. 3 Group pieces of code. 4 Expansions cont. 5 if alternatives. 6 Debugging scripts. 7 Command types. Linux administration course. 22
  • 30. Подстановка ‑ домашняя директория Tilde expansion ~ 1 echo ~ 2 echo ~ / . ssh 3 echo $HOME / . ssh 4 echo ~test01 / . ssh / Linux administration course. 22
  • 31. Подстановка ‑ домашняя директория Tilde expansion ~ 1 echo ~ 2 echo ~ / . ssh 3 echo $HOME / . ssh 4 echo ~test01 / . ssh / • ~ ‑ сокращение $HOME • ~user/ ‑ $HOME для пользователя user • / ‑ символ завершает действие ~ Широко применяется в скриптах, на страницах документации Linux administration course. 22
  • 33. Подстановка команд Синтаксис: •  ̀command ̀ • $(command) Задание Присвоить переменной LIST результат выполнения команды ls -1 Вывести на экран переменную LIST Linux administration course. 23
  • 34. Спецсимволы • # – Вся строка после # является комментарием • ; – Разделение команд • : – NOP оператор (похож на встроенный вызов true) • source или . – скрипт выполняется в текущем экземпляре shell Linux administration course. 24
  • 35. 1 Manipulate the different I/O streams with I/O Redirection 2 Repeat operations with loops. 3 Group pieces of code. 4 Expansions cont. 5 if alternatives. 6 Debugging scripts. 7 Command types. Linux administration course. 25
  • 36. Управляющие операторы Можно делать цепочки команд: command1 && command2 || command3 command1 && command2 && command3 && ... Применение операторов && и ||: • Изменяют поведение кода в зависимости от успешности выполнения команд • Объединяют команды • Улучшают читаемость кода для простых проверок. Одна строка vs три в if • Но длинные цепочки сложно отлаживать и поддерживать Linux administration course. 25
  • 37. Command chain example It only takes three commands to install Gentoo Linux administration course. 26
  • 38. Command chain example It only takes three commands to install Gentoo 1 cfdisk / dev / hda && mkfs . xfs / dev / hda1 && mount / dev / hda1 / mnt / gentoo / && chroot / mnt / gentoo / && env−update && . / etc / profile && emerge sync && cd / usr / portage && scripts / bootsrap . sh && emerge system && emerge vim && vi / etc / fstab && emerge gentoo−dev− sources && cd / usr / src / linux && make menuconfig && make install modules_install && emerge gnome mozilla−firefox openoffice && emerge grub && cp / boot / grub / grub . conf . sample / boot / grub / grub . conf && vi / boot / grub / grub . conf && grub && init 6 Linux administration course. 26
  • 39. Command chain example It only takes three commands to install Gentoo 1 cfdisk / dev / hda && mkfs . xfs / dev / hda1 && mount / dev / hda1 / mnt / gentoo / && chroot / mnt / gentoo / && env−update && . / etc / profile && emerge sync && cd / usr / portage && scripts / bootsrap . sh && emerge system && emerge vim && vi / etc / fstab && emerge gentoo−dev− sources && cd / usr / src / linux && make menuconfig && make install modules_install && emerge gnome mozilla−firefox openoffice && emerge grub && cp / boot / grub / grub . conf . sample / boot / grub / grub . conf && vi / boot / grub / grub . conf && grub && init 6 That is the first one Linux administration course. 26
  • 40. Условные операторы && || Выполнить команды: 1 cd video && echo Exit code $? Is OK . I am watching video . 2 mkdir video # запустить предыдущую команду еще раз Linux administration course. 27
  • 41. Условные операторы && || Выполнить команды: 1 cd video && echo Exit code $? Is OK . I am watching video . 2 mkdir video # запустить предыдущую команду еще раз Синтаксис: command1 && command2 Oболочка выполняет command2 если успешно выполнилась command1. Логическая операция И (AND) Linux administration course. 27
  • 42. Условные операторы && || Выполнить команды: 1 cd video && echo Exit code $? Is OK . I am watching video . 2 mkdir video # запустить предыдущую команду еще раз Синтаксис: command1 && command2 Oболочка выполняет command2 если успешно выполнилась command1. Логическая операция И (AND) Выполнить команды: Linux administration course. 27
  • 43. Условные операторы && || Выполнить команды: 1 cd video && echo Exit code $? Is OK . I am watching video . 2 mkdir video # запустить предыдущую команду еще раз Синтаксис: command1 && command2 Oболочка выполняет command2 если успешно выполнилась command1. Логическая операция И (AND) Выполнить команды: 1 cd video | | echo Exit code $ ? . Video is not available 2 rmdir video # Удалим и повторим еще раз первую команду . Linux administration course. 27
  • 44. Условные операторы && || Выполнить команды: 1 cd video && echo Exit code $? Is OK . I am watching video . 2 mkdir video # запустить предыдущую команду еще раз Синтаксис: command1 && command2 Oболочка выполняет command2 если успешно выполнилась command1. Логическая операция И (AND) Выполнить команды: 1 cd video | | echo Exit code $ ? . Video is not available 2 rmdir video # Удалим и повторим еще раз первую команду . Linux administration course. 27
  • 45. 1 Manipulate the different I/O streams with I/O Redirection 2 Repeat operations with loops. 3 Group pieces of code. 4 Expansions cont. 5 if alternatives. 6 Debugging scripts. 7 Command types. Linux administration course. 28
  • 46. Включение режима отладки I Используется команда set для активизации различных режимов работы bash. Включение режима производится с помощью ”‑”, а отключение – ”+”. Linux administration course. 28
  • 47. Включение режима отладки II Примеры включения режима отладки. 1 bash −x . / script . sh # опция командной строки 2 3 # ! / bin / bash −x # внутри скрипта опцией 4 [ . . script . . ] 5 6 # ! / usr / bin / env bash 7 set −x # внутри скрипта командой 8 9 # ! / usr / bin / env bash 10 [ . . irrelevant code . . ] 11 set −x # включаем отладку на часть кода 12 [ . . relevant code . . ] 13 set +x # выключаем отладку 14 [ . . irrelevant code . . ] Linux administration course. 29
  • 48. Ключи отладки команды set I • set -v – вывод на экран исполняемой строки 1 set −v 2 echo $HOME • set -x – вывод на экран исполняемой строки с автоматической подстановкой значений переменных 1 set −x 2 echo $HOME • set -n – проверка синтаксиса скрипта 1 bash −n t e s t . sh Linux administration course. 30
  • 49. Ключи отладки команды set II • set -f – отключение генерации имен файлов с использованием метасимволов (globbing) 1 echo ~ / . * 2 set −f 3 echo ~ / . * Linux administration course. 31
  • 50. Ключи отладки команды set III • set -e – остановка выполнения скрипта, если какая‑либо команда возвращяет errorstatus не равный 0 1 # ! / bin / bash 2 3 set −e 4 f a l s e | | true 5 echo Working 6 f a l s e 7 echo Still working Linux administration course. 32
  • 51. Отладочные переменные $LINENO номер текущей строки $FUNCNAME массив содержит имена всех функций из стека вызовов. 0 элемент имя текущей функции $BASH_SOURCE массив содержит имена подключенных файлов source $SHLVL уровень вложенности интерпретатора $PIPESTATUS массив статусов завершения всех команд в pipe Альтернативный вид PS4. 1 export PS4= ’ +( $ { BASH_SOURCE } : $ { LINENO } ) : $ { FUNCNAME [ 0 ] : + $ {FUNCNAME [ 0 ] } ( ) : } ’ Linux administration course. 33
  • 52. Стек вызовов • caller [N] – функция выводит на экран номер строки, имена функции и файла вызывающего скрипта 1 # ! / bin / bash 2 backtrace ( ) { 3 echo Backtrace : 4 f o r ( ( i=$SHLVL ; i >=0; i−−)) ; do 5 c a l l e r $i 6 done 7 } 8 f1 ( ) { echo Function $FUNCNAME at $LINENO && backtrace ; } 9 f2 ( ) { f1 ; } 10 f2 Linux administration course. 34
  • 53. Типичные ошибки в условном выражении Написать скрипт прнимающий один аргумент и определяющий файл ли это. Если файл выводить на экран строку ’regular file detected’ в случае успеха, Предварительно создать: файлы c именами file, my file check.sh ‑ исправить 1 filename=$1 2 3 [−f $filename ] && echo ” regular f i l e detected ” | | echo ” not regular f i l e ” 4 e x i t # to run code below comment i t 5 # or v a r i a n t with i f 6 i f [−f $filename ] ; then 7 echo ’ re g ular f i l e detected 8 else 9 echo ” not regular f i l e ” Linux administration course. 35
  • 54. Сообщения об ошибках Пример. 1 check . sh : line 4 : [−f : command not found 2 3 check . sh : line 4 : [ : missing ] ’ 4 5 . / check . sh # i n c o r r e c t code l o g i c . No arguments . 6 re g ular f i l e detected 7 8 . / check . sh : l i n e 5 : [ : my: binary operator expected 9 10 . / check . sh : l i n e 112: syntax e r r o r : unexpected end of f i l e 11 12 bash : t e s t : too many argumentsLinux administration course. 36
  • 55. 1 Manipulate the different I/O streams with I/O Redirection 2 Repeat operations with loops. 3 Group pieces of code. 4 Expansions cont. 5 if alternatives. 6 Debugging scripts. 7 Command types. Linux administration course. 37
  • 56. Запуск программы из командной строки • Находим приглашение командной строки $, #, user@host: $ • Вводим имя команды, аргументы и запускаем на выполнение нажатием <Enter> Что такое команды? • исполняемая программа (бинарный файл, скрипт) • встроенные в оболочку команды (shell built‑ins) • функция оболочки • сокращение команды (an alias) Linux administration course. 37
  • 57. Задание. Виды команд в оболочке Команда type отображает тип команды. Выполним ее для различных команд. 1 type type cd help a l i a s read 2 type dmesg rm 3 type i f 4 type −a ls 5 type −a echo pwd t e s t Два типа команд. А оно нам надо? Есть ли разница? Linux administration course. 38
  • 58. Задание. Виды команд в оболочке Команда type отображает тип команды. Выполним ее для различных команд. 1 type type cd help a l i a s read 2 type dmesg rm 3 type i f 4 type −a ls 5 type −a echo pwd t e s t Два типа команд. А оно нам надо? Есть ли разница? Встроенные и внешние команды • всегда присутствуют в интерпретаторе, внешних может и не быть на диске • однообразный синтаксис на разных платформах (переносимость скриптов) • как правило выполняются быстрее, т.к. код находится в памяти • есть средства, чтобы выключить встроенные команды,Linux administration course. 38
  • 59. Условные операторы: case 1 case ” $ v a r i a b l e ” in 2 pattern1 ) command1 3 command2 4 ; ; 5 pattern2 | pattern3 ) 6 command3 7 command4 8 ; ; 9 esac Linux administration course. 39
  • 60. Условные операторы: case 1 case ” $ v a r i a b l e ” in 2 pattern1 ) command1 3 command2 4 ; ; 5 pattern2 | pattern3 ) 6 command3 7 command4 8 ; ; 9 esac Пример: 1 # ! / bin / bash 2 3 cmd=$1 ; var=$2 4 case ”$cmd” in 5 −−print|−−echo ) 6 echo ”Ура , печатаем ! ” ; ; 7 abc *| xyz *) 8 echo ”Странная команда $cmd” ; ; 9 *) 10 echo ”Я таких команд не знаю : $cmd” 1>&2 11 e x i t 1 ; ; 12 esac 13 [ ! −z ” $var ” ] && echo ” переменная $var = $var ” 14 e x i t 0Linux administration course. 39