0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>28 май 2025</li>
2
<ul><li>28 май 2025</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Заставляем пингвина делать всё, что нам нужно.</p>
4
</ul><p>Заставляем пингвина делать всё, что нам нужно.</p>
5
<p>Иллюстрация: Катя Павловская для Skillbox Media</p>
5
<p>Иллюстрация: Катя Павловская для Skillbox Media</p>
6
<p>Филолог и технарь, пишет об IT так, что поймут даже новички. Коммерческий редактор, автор технических статей для vc.ru и "Хабра".</p>
6
<p>Филолог и технарь, пишет об IT так, что поймут даже новички. Коммерческий редактор, автор технических статей для vc.ru и "Хабра".</p>
7
<p>Linux - операционная система с открытым исходным кодом, которая даёт пользователям больше гибкости и контроля над системой. С помощью Bash - встроенного языка командной строки - можно автоматизировать рутинные задачи и управлять системой благодаря скриптам. В этой статье разберём, что такое Bash, зачем он нужен и как с его помощью писать полезные скрипты.</p>
7
<p>Linux - операционная система с открытым исходным кодом, которая даёт пользователям больше гибкости и контроля над системой. С помощью Bash - встроенного языка командной строки - можно автоматизировать рутинные задачи и управлять системой благодаря скриптам. В этой статье разберём, что такое Bash, зачем он нужен и как с его помощью писать полезные скрипты.</p>
8
<p><strong>Содержание</strong></p>
8
<p><strong>Содержание</strong></p>
9
<ul><li><a>Что такое Bash</a></li>
9
<ul><li><a>Что такое Bash</a></li>
10
<li><a>Какой редактор выбрать</a></li>
10
<li><a>Какой редактор выбрать</a></li>
11
<li><a>Как создать скрипт</a></li>
11
<li><a>Как создать скрипт</a></li>
12
<li><a>"Привет, мир!": пишем первый скрипт</a></li>
12
<li><a>"Привет, мир!": пишем первый скрипт</a></li>
13
<li><a>Как запустить Bash-скрипт в Linux</a></li>
13
<li><a>Как запустить Bash-скрипт в Linux</a></li>
14
<li><a>Аргументы</a></li>
14
<li><a>Аргументы</a></li>
15
<li><a>Переменные</a></li>
15
<li><a>Переменные</a></li>
16
<li><a>Условные операторы</a></li>
16
<li><a>Условные операторы</a></li>
17
<li><a>Циклы</a></li>
17
<li><a>Циклы</a></li>
18
<li><a>Конструкция case</a></li>
18
<li><a>Конструкция case</a></li>
19
<li><a>Функции</a></li>
19
<li><a>Функции</a></li>
20
</ul><p><strong>Bash (Bourne Again Shell)</strong> - это одна из самых популярных оболочек командной строки в Linux. Она позволяет взаимодействовать с системой с помощью простых текстовых команд.</p>
20
</ul><p><strong>Bash (Bourne Again Shell)</strong> - это одна из самых популярных оболочек командной строки в Linux. Она позволяет взаимодействовать с системой с помощью простых текстовых команд.</p>
21
<p>Кроме того, Bash - это и язык программирования, который позволяет создавать скрипты для автоматизации задач. Bash-скрипты поддерживают переменные, циклы, условия, функции и могут взаимодействовать с файловой системой и вводом-выводом.</p>
21
<p>Кроме того, Bash - это и язык программирования, который позволяет создавать скрипты для автоматизации задач. Bash-скрипты поддерживают переменные, циклы, условия, функции и могут взаимодействовать с файловой системой и вводом-выводом.</p>
22
<p>Bash чаще всего используют для автоматизации - например, чтобы:</p>
22
<p>Bash чаще всего используют для автоматизации - например, чтобы:</p>
23
<ul><li>переименовать сотни файлов в папке;</li>
23
<ul><li>переименовать сотни файлов в папке;</li>
24
<li>раз в сутки копировать важные документы в резервную папку;</li>
24
<li>раз в сутки копировать важные документы в резервную папку;</li>
25
<li>настроить запуск сервера или программы при включении компьютера;</li>
25
<li>настроить запуск сервера или программы при включении компьютера;</li>
26
<li>скачать нужный архив и сразу его распаковать.</li>
26
<li>скачать нужный архив и сразу его распаковать.</li>
27
</ul><p>Хотя Bash чаще всего ассоциируют с Linux, он также работает на macOS, а в Windows его можно использовать через WSL (Windows Subsystem for Linux).</p>
27
</ul><p>Хотя Bash чаще всего ассоциируют с Linux, он также работает на macOS, а в Windows его можно использовать через WSL (Windows Subsystem for Linux).</p>
28
<p>Прежде чем погрузиться в основы Bash, нужно выбрать редактор и подготовить рабочее окружение. Для написания скриптов подойдёт любой текстовый редактор, встроенный в операционную систему, однако гораздо удобнее работать в специально настроенной среде. Ниже - три популярных варианта: от классических консольных редакторов до современной графической IDE.</p>
28
<p>Прежде чем погрузиться в основы Bash, нужно выбрать редактор и подготовить рабочее окружение. Для написания скриптов подойдёт любой текстовый редактор, встроенный в операционную систему, однако гораздо удобнее работать в специально настроенной среде. Ниже - три популярных варианта: от классических консольных редакторов до современной графической IDE.</p>
29
Интерфейс редактора Vim в терминале<em>Скриншот:<a>Vim</a>/ Skillbox Media</em><p><a><strong>Vim</strong></a> - это консольный редактор, который профессионалы часто используют для работы с Bash-скриптами. Его ценят за высокую скорость работы и универсальность.</p>
29
Интерфейс редактора Vim в терминале<em>Скриншот:<a>Vim</a>/ Skillbox Media</em><p><a><strong>Vim</strong></a> - это консольный редактор, который профессионалы часто используют для работы с Bash-скриптами. Его ценят за высокую скорость работы и универсальность.</p>
30
<p><strong>Преимущества:</strong></p>
30
<p><strong>Преимущества:</strong></p>
31
<ul><li>Есть подсветка синтаксиса и автодополнение кода.</li>
31
<ul><li>Есть подсветка синтаксиса и автодополнение кода.</li>
32
<li>С помощью плагинов можно превратить Vim в полноценную консольную IDE.</li>
32
<li>С помощью плагинов можно превратить Vim в полноценную консольную IDE.</li>
33
<li>Большие возможности кастомизации.</li>
33
<li>Большие возможности кастомизации.</li>
34
</ul><p><strong>Недостатки:</strong></p>
34
</ul><p><strong>Недостатки:</strong></p>
35
<ul><li>Новичкам бывает трудно научиться работать с редактором.</li>
35
<ul><li>Новичкам бывает трудно научиться работать с редактором.</li>
36
<li>Нужно выделить время на настройку.</li>
36
<li>Нужно выделить время на настройку.</li>
37
</ul>Интерфейс редактора Nano в терминале<em>Скриншот:<a>Nano</a>/ Skillbox Media</em><p><a><strong>Nano</strong></a> - ещё один консольный редактор, но уже для тех, кто хочет сразу перейти к работе и не тратить время на настройку. Разработчики дистрибутивов Linux включают Nano в базовый набор программ, который доступен из коробки.</p>
37
</ul>Интерфейс редактора Nano в терминале<em>Скриншот:<a>Nano</a>/ Skillbox Media</em><p><a><strong>Nano</strong></a> - ещё один консольный редактор, но уже для тех, кто хочет сразу перейти к работе и не тратить время на настройку. Разработчики дистрибутивов Linux включают Nano в базовый набор программ, который доступен из коробки.</p>
38
<p><strong>Преимущества:</strong></p>
38
<p><strong>Преимущества:</strong></p>
39
<ul><li>Простой в освоении, что полезно для новичков.</li>
39
<ul><li>Простой в освоении, что полезно для новичков.</li>
40
<li>Интуитивно понятный интерфейс.</li>
40
<li>Интуитивно понятный интерфейс.</li>
41
</ul><p><strong>Недостатки:</strong></p>
41
</ul><p><strong>Недостатки:</strong></p>
42
<ul><li>Нет поддержки плагинов, автоматического завершения кода.</li>
42
<ul><li>Нет поддержки плагинов, автоматического завершения кода.</li>
43
<li>Мало возможностей для кастомизации.</li>
43
<li>Мало возможностей для кастомизации.</li>
44
</ul>Графический интерфейс редактора VS Code с открытой страницей дополнения Bash IDE<em>Скриншот:<a>Visual Studio Code</a>/ Skillbox Media</em><p><a><strong>VS Code</strong></a> - универсальный редактор кода, который можно превратить в среду разработки на практически любом языке программирования. Чтобы работать с Bash было удобно, стоит установить<a>плагин Bash IDE</a>.</p>
44
</ul>Графический интерфейс редактора VS Code с открытой страницей дополнения Bash IDE<em>Скриншот:<a>Visual Studio Code</a>/ Skillbox Media</em><p><a><strong>VS Code</strong></a> - универсальный редактор кода, который можно превратить в среду разработки на практически любом языке программирования. Чтобы работать с Bash было удобно, стоит установить<a>плагин Bash IDE</a>.</p>
45
<p><strong>Преимущества:</strong></p>
45
<p><strong>Преимущества:</strong></p>
46
<ul><li>Подходит для программирования на любом языке.</li>
46
<ul><li>Подходит для программирования на любом языке.</li>
47
<li>Есть подсветка синтаксиса, автоматическое завершение кода, плагины для кастомизации и даже ИИ-помощники.</li>
47
<li>Есть подсветка синтаксиса, автоматическое завершение кода, плагины для кастомизации и даже ИИ-помощники.</li>
48
<li>Современный пользовательский интерфейс.</li>
48
<li>Современный пользовательский интерфейс.</li>
49
</ul><p><strong>Недостатки:</strong></p>
49
</ul><p><strong>Недостатки:</strong></p>
50
<ul><li>Может сильно нагружать систему, если установить много плагинов.</li>
50
<ul><li>Может сильно нагружать систему, если установить много плагинов.</li>
51
<li>Долго запускается на слабых компьютерах.</li>
51
<li>Долго запускается на слабых компьютерах.</li>
52
</ul><p>Пока можете выбрать редактор, который вам больше понравился по описанию. Позже, безусловно, у вас будет время попробовать несколько решений и определить фаворита. Мы в этой статье будем показывать всё на примере редактора Nano.</p>
52
</ul><p>Пока можете выбрать редактор, который вам больше понравился по описанию. Позже, безусловно, у вас будет время попробовать несколько решений и определить фаворита. Мы в этой статье будем показывать всё на примере редактора Nano.</p>
53
<p><strong>Bash-скрипт</strong> - это текстовый файл с расширением .sh, который содержит в себе набор команд для оболочки Bash. Чтобы создать такой файл в Linux, надо запустить терминал и выполнить в нём команду touch. В качестве аргумента следует указать имя нового файла:</p>
53
<p><strong>Bash-скрипт</strong> - это текстовый файл с расширением .sh, который содержит в себе набор команд для оболочки Bash. Чтобы создать такой файл в Linux, надо запустить терминал и выполнить в нём команду touch. В качестве аргумента следует указать имя нового файла:</p>
54
touch имя_файла.sh<p>Если не указать точный путь к файлу, то команда touch создаст его в домашней папке Linux.</p>
54
touch имя_файла.sh<p>Если не указать точный путь к файлу, то команда touch создаст его в домашней папке Linux.</p>
55
Файл script.sh в домашней папке - результат работы команды touch<em>Скриншот: Linux Ubuntu / Skillbox Media</em><p>Созданный файл можно открыть в любом текстовом редакторе. Это можно сделать двойным кликом левой кнопки мыши или с помощью терминала. При втором способе надо выполнить команду, которая состоит из названия редактора и имени файла. Например, вот так можно открыть файл с помощью Nano:</p>
55
Файл script.sh в домашней папке - результат работы команды touch<em>Скриншот: Linux Ubuntu / Skillbox Media</em><p>Созданный файл можно открыть в любом текстовом редакторе. Это можно сделать двойным кликом левой кнопки мыши или с помощью терминала. При втором способе надо выполнить команду, которая состоит из названия редактора и имени файла. Например, вот так можно открыть файл с помощью Nano:</p>
56
nano script.sh<p>По традиции программисты начинают изучать новый язык программирования с помощью программы, которая выводит на экран фразу "Hello, World!". Не будем ломать устои и пойдём по уже протоптанному пути :)</p>
56
nano script.sh<p>По традиции программисты начинают изучать новый язык программирования с помощью программы, которая выводит на экран фразу "Hello, World!". Не будем ломать устои и пойдём по уже протоптанному пути :)</p>
57
<p>Создайте файл с расширением .sh, откройте его в текстовом редакторе и вставьте в него код нашего первого скрипта:</p>
57
<p>Создайте файл с расширением .sh, откройте его в текстовом редакторе и вставьте в него код нашего первого скрипта:</p>
58
#!/bin/bash echo "Hello, World!"<p>В коде выше:</p>
58
#!/bin/bash echo "Hello, World!"<p>В коде выше:</p>
59
<ul><li>#!/bin/bash - строка, которая указывает, какая программа должна выполнить команды в файле. Например, если бы мы указали #!/bin/python3, то система ожидала бы от нас кода на Python. В сообществе эту строку называют "шебанг".</li>
59
<ul><li>#!/bin/bash - строка, которая указывает, какая программа должна выполнить команды в файле. Например, если бы мы указали #!/bin/python3, то система ожидала бы от нас кода на Python. В сообществе эту строку называют "шебанг".</li>
60
<li>echo"Hello, World!" - команда, которая выводит фразу после себя в терминал.</li>
60
<li>echo"Hello, World!" - команда, которая выводит фразу после себя в терминал.</li>
61
</ul><p>В интерфейсе редактора Nano код выглядит так:</p>
61
</ul><p>В интерфейсе редактора Nano код выглядит так:</p>
62
Редактор Nano с открытым скриптом<em>Скриншот:<a>Nano</a>/ Skillbox Media</em><p>Перед тем как закрывать редактор, надо сохранить скрипт. В современных редакторах, например в VS Code, можно настроить функцию автосохранения. В Vim, Nano и других консольных программах всё надо делать вручную.</p>
62
Редактор Nano с открытым скриптом<em>Скриншот:<a>Nano</a>/ Skillbox Media</em><p>Перед тем как закрывать редактор, надо сохранить скрипт. В современных редакторах, например в VS Code, можно настроить функцию автосохранения. В Vim, Nano и других консольных программах всё надо делать вручную.</p>
63
<p>В Nano для сохранения файла используйте сочетание клавиш<strong>Ctrl + O</strong>, а для выхода из программы -<strong>Ctrl + X</strong>.</p>
63
<p>В Nano для сохранения файла используйте сочетание клавиш<strong>Ctrl + O</strong>, а для выхода из программы -<strong>Ctrl + X</strong>.</p>
64
<p>В Linux есть встроенная защита, которая не даёт случайным скриптам запускаться и хозяйничать в компьютере. Пользователь должен явно указать, что файл может быть исполняемым. Для этого в терминале надо выполнить следующую команду:</p>
64
<p>В Linux есть встроенная защита, которая не даёт случайным скриптам запускаться и хозяйничать в компьютере. Пользователь должен явно указать, что файл может быть исполняемым. Для этого в терминале надо выполнить следующую команду:</p>
65
chmod +x script.sh<p>После этого скрипт можно запустить с помощью команды ./:</p>
65
chmod +x script.sh<p>После этого скрипт можно запустить с помощью команды ./:</p>
66
./script.sh<p>Программа, которую мы написали ранее, просто выведет в терминал приветствие "Hello, World!":</p>
66
./script.sh<p>Программа, которую мы написали ранее, просто выведет в терминал приветствие "Hello, World!":</p>
67
<em>Скриншот: Bash / Skillbox Media</em><p><strong>Аргументы</strong> - это данные, которые можно передать скрипту во время запуска. Они позволяют менять поведение скрипта без изменения кода. Вот так в общем виде выглядит запуск скрипта с несколькими аргументами:</p>
67
<em>Скриншот: Bash / Skillbox Media</em><p><strong>Аргументы</strong> - это данные, которые можно передать скрипту во время запуска. Они позволяют менять поведение скрипта без изменения кода. Вот так в общем виде выглядит запуск скрипта с несколькими аргументами:</p>
68
./имя_скрипта.sh аргумент1 аргумент2 аргумент3...<p>Давайте разберёмся на примере. Представьте, что вы написали код, который выводит в терминал приветствие для Михаила:</p>
68
./имя_скрипта.sh аргумент1 аргумент2 аргумент3...<p>Давайте разберёмся на примере. Представьте, что вы написали код, который выводит в терминал приветствие для Михаила:</p>
69
#!/bin/bash echo "Привет, Михаил!"<p>При каждом запуске скрипт будет выводить один и тот же текст, но с помощью аргументов можно сделать так, чтобы код выводил имя, которое пользователь указывает в терминале:</p>
69
#!/bin/bash echo "Привет, Михаил!"<p>При каждом запуске скрипт будет выводить один и тот же текст, но с помощью аргументов можно сделать так, чтобы код выводил имя, которое пользователь указывает в терминале:</p>
70
#!/bin/bash echo "Привет, $1!"<p>Команда для запуска скрипта будет выглядеть так:</p>
70
#!/bin/bash echo "Привет, $1!"<p>Команда для запуска скрипта будет выглядеть так:</p>
71
./script.sh Екатерина<p>В терминале появится приветствие с именем, которое указали во время запуска:</p>
71
./script.sh Екатерина<p>В терминале появится приветствие с именем, которое указали во время запуска:</p>
72
<em>Скриншот: Bash / Skillbox Media</em><p>В коде можно использовать несколько тысяч аргументов. Их количество ограничено только длиной командной строки в каждой системе. Давайте напишем скрипт, который будет принимать фамилию, имя, возраст пользователя и выводить их в терминал:</p>
72
<em>Скриншот: Bash / Skillbox Media</em><p>В коде можно использовать несколько тысяч аргументов. Их количество ограничено только длиной командной строки в каждой системе. Давайте напишем скрипт, который будет принимать фамилию, имя, возраст пользователя и выводить их в терминал:</p>
73
#!/bin/bash echo "Имя: $1" echo "Фамилия: $2" echo "Возраст: $3"<p>Запустим код с помощью команды ./script.sh Екатерина Иванова 31 и посмотрим на вывод в терминале:</p>
73
#!/bin/bash echo "Имя: $1" echo "Фамилия: $2" echo "Возраст: $3"<p>Запустим код с помощью команды ./script.sh Екатерина Иванова 31 и посмотрим на вывод в терминале:</p>
74
<em>Скриншот: Bash / Skillbox Media</em><p><strong>Переменные</strong> - это контейнеры для хранения данных. Вместо того чтобы вручную указывать повторяющееся значение в разных местах скрипта, можно обращаться к переменной, в которой хранится это значение.</p>
74
<em>Скриншот: Bash / Skillbox Media</em><p><strong>Переменные</strong> - это контейнеры для хранения данных. Вместо того чтобы вручную указывать повторяющееся значение в разных местах скрипта, можно обращаться к переменной, в которой хранится это значение.</p>
75
<p>Чтобы объявить переменную, нужно указать её название, а после поставить знак равенства и вписать значение:</p>
75
<p>Чтобы объявить переменную, нужно указать её название, а после поставить знак равенства и вписать значение:</p>
76
name="Иван"<p>Чтобы обратиться к переменной, нужно вписать её название после символа доллара ($):</p>
76
name="Иван"<p>Чтобы обратиться к переменной, нужно вписать её название после символа доллара ($):</p>
77
$name<p>Давайте создадим скрипт, в котором будет одна переменная с заранее известным значением - переменная с именем Иван, а возраст пользователь должен будет передать в виде аргумента:</p>
77
$name<p>Давайте создадим скрипт, в котором будет одна переменная с заранее известным значением - переменная с именем Иван, а возраст пользователь должен будет передать в виде аргумента:</p>
78
#!/bin/bash name="Иван" echo "Здравствуйте, $name!" echo "Ваш возраст: $1"<p>Вот что выведет скрипт:</p>
78
#!/bin/bash name="Иван" echo "Здравствуйте, $name!" echo "Ваш возраст: $1"<p>Вот что выведет скрипт:</p>
79
<em>Скриншот: Bash / Skillbox Media</em><p>Значения переменных можно использовать в математических операциях. Для этого в Bash используют конструкцию $(( )). Напишем скрипт, который складывает значения двух переменных:</p>
79
<em>Скриншот: Bash / Skillbox Media</em><p>Значения переменных можно использовать в математических операциях. Для этого в Bash используют конструкцию $(( )). Напишем скрипт, который складывает значения двух переменных:</p>
80
#!/bin/bash variable1=86 variable2=91 total=$((points1 + points2)) echo "Сумма: $total"<p>Вот что код выведет в терминал:</p>
80
#!/bin/bash variable1=86 variable2=91 total=$((points1 + points2)) echo "Сумма: $total"<p>Вот что код выведет в терминал:</p>
81
<em>Скриншот: Bash / Skillbox Media</em><p>Значения переменных можно не только складывать. Вот список математических операторов, доступных в Bash:</p>
81
<em>Скриншот: Bash / Skillbox Media</em><p>Значения переменных можно не только складывать. Вот список математических операторов, доступных в Bash:</p>
82
<strong>Операция</strong><strong>Оператор</strong>Сложение+Вычитание-Умножение*Целочисленное деление/Остаток от деления%Возведение в степень**<p><strong>Условные операторы</strong> - это конструкции, которые позволяют выполнять команды в зависимости от выполнения условий. Их используют вместе с условной конструкцией if-then.</p>
82
<strong>Операция</strong><strong>Оператор</strong>Сложение+Вычитание-Умножение*Целочисленное деление/Остаток от деления%Возведение в степень**<p><strong>Условные операторы</strong> - это конструкции, которые позволяют выполнять команды в зависимости от выполнения условий. Их используют вместе с условной конструкцией if-then.</p>
83
<p>Вот как она выглядит в общем виде:</p>
83
<p>Вот как она выглядит в общем виде:</p>
84
if [ условие ]; then команды, которые нужно выполнить, если условие верно else команды по умолчанию fi<p>Операторы, которые можно использовать в условиях, выглядят так:</p>
84
if [ условие ]; then команды, которые нужно выполнить, если условие верно else команды по умолчанию fi<p>Операторы, которые можно использовать в условиях, выглядят так:</p>
85
<strong>Сравнения чисел</strong><strong></strong><strong>Операция</strong><strong>Оператор</strong>Равно-eqНе равно-neМеньше-ltБольше-gtМеньше или равно-leБольше или равно-ge<strong>Сравнения строк</strong><strong>Операция</strong><strong>Оператор</strong>Равно=Не равно!=Меньше<Больше>Строка пустая-zСтрока не пустая-n<strong>Проверка файлов</strong><strong>Операция</strong><strong>Оператор</strong>Файл существует-eОбычный файл-fИсполняемый файл-xДиректория-dФайл доступен для чтения-rФайл доступен для записи-w<strong>Логические операции</strong><strong>Операция</strong><strong>Оператор</strong>Логическое И&&Логическое ИЛИ||<p>Напишем программу, которая в виде аргумента будет получать количество баллов пользователя и сообщать, сдал он экзамен или нет. Договоримся, что для успешной сдачи экзамена надо набрать не менее 85 баллов:</p>
85
<strong>Сравнения чисел</strong><strong></strong><strong>Операция</strong><strong>Оператор</strong>Равно-eqНе равно-neМеньше-ltБольше-gtМеньше или равно-leБольше или равно-ge<strong>Сравнения строк</strong><strong>Операция</strong><strong>Оператор</strong>Равно=Не равно!=Меньше<Больше>Строка пустая-zСтрока не пустая-n<strong>Проверка файлов</strong><strong>Операция</strong><strong>Оператор</strong>Файл существует-eОбычный файл-fИсполняемый файл-xДиректория-dФайл доступен для чтения-rФайл доступен для записи-w<strong>Логические операции</strong><strong>Операция</strong><strong>Оператор</strong>Логическое И&&Логическое ИЛИ||<p>Напишем программу, которая в виде аргумента будет получать количество баллов пользователя и сообщать, сдал он экзамен или нет. Договоримся, что для успешной сдачи экзамена надо набрать не менее 85 баллов:</p>
86
#!/bin/bash minimum_score=85 user_score=$1 if [ $user_score -gt $minimum_score ]; then echo "Вы сдали экзамен!" else echo "Вы не сдали экзамен." fi<p>Вот что программа выведет, если запустить её с разными аргументами:</p>
86
#!/bin/bash minimum_score=85 user_score=$1 if [ $user_score -gt $minimum_score ]; then echo "Вы сдали экзамен!" else echo "Вы не сдали экзамен." fi<p>Вот что программа выведет, если запустить её с разными аргументами:</p>
87
<em>Скриншот: Bash / Skillbox Media</em><p>Циклы - конструкции, которые позволяют выполнять одну и ту же последовательность команд несколько раз. Например, с их помощью можно последовательно обработать несколько файлов или вывести в терминал заданную последовательность чисел. В Bash есть три вида циклов: for, while и until. Давайте детально рассмотрим каждый.</p>
87
<em>Скриншот: Bash / Skillbox Media</em><p>Циклы - конструкции, которые позволяют выполнять одну и ту же последовательность команд несколько раз. Например, с их помощью можно последовательно обработать несколько файлов или вывести в терминал заданную последовательность чисел. В Bash есть три вида циклов: for, while и until. Давайте детально рассмотрим каждый.</p>
88
<p>Цикл for выполняет команду для каждого значения из списка. Для примера напечатаем с его помощью числа от 1 до 10:</p>
88
<p>Цикл for выполняет команду для каждого значения из списка. Для примера напечатаем с его помощью числа от 1 до 10:</p>
89
#!/bin/bash for number in 1 2 3 4 5 6 7 8 9 10; do echo "Число: $number" done<em>Скриншот: Bash / Skillbox Media</em><p>Ещё цикл for можно использовать для обхода файлов в директории. Скрипт откроет каждый файл, соответствующий указанным параметрам, и выполнит заданное действие:</p>
89
#!/bin/bash for number in 1 2 3 4 5 6 7 8 9 10; do echo "Число: $number" done<em>Скриншот: Bash / Skillbox Media</em><p>Ещё цикл for можно использовать для обхода файлов в директории. Скрипт откроет каждый файл, соответствующий указанным параметрам, и выполнит заданное действие:</p>
90
#!/bin/bash for file in *.txt; do echo "Файл: $file" done<p>Цикл while выполняет команды, пока условие истинно. Как только условие становится ложным, выполнение цикла прекращается. В качестве примера снова напишем скрипт для вывода чисел от 1 до 10. На этот раз слегка изменим алгоритм: создадим переменную, значение которой будем увеличивать на каждом шаге до тех пор, пока оно не станет равно 10. Это и остановит выполнение кода:</p>
90
#!/bin/bash for file in *.txt; do echo "Файл: $file" done<p>Цикл while выполняет команды, пока условие истинно. Как только условие становится ложным, выполнение цикла прекращается. В качестве примера снова напишем скрипт для вывода чисел от 1 до 10. На этот раз слегка изменим алгоритм: создадим переменную, значение которой будем увеличивать на каждом шаге до тех пор, пока оно не станет равно 10. Это и остановит выполнение кода:</p>
91
#!/bin/bash number=1 while [ $number -le 10 ]; do echo "Число: $number" number=$((number + 1)) done<p>Вот что появится в терминале после запуска скрипта:</p>
91
#!/bin/bash number=1 while [ $number -le 10 ]; do echo "Число: $number" number=$((number + 1)) done<p>Вот что появится в терминале после запуска скрипта:</p>
92
<em>Скриншот: Bash / Skillbox Media</em><p>Цикл until - противоположность while: он выполняет команды, пока условие остаётся ложным. Цикл завершится, когда условие станет истинным. Теперь выведем числа в обратном порядке. Для этого создадим переменную со значением 10 и на каждом шаге будем вычитать из него 1. Будем продолжать до тех пор, пока значение переменной не станет единицей, - это остановит выполнение кода:</p>
92
<em>Скриншот: Bash / Skillbox Media</em><p>Цикл until - противоположность while: он выполняет команды, пока условие остаётся ложным. Цикл завершится, когда условие станет истинным. Теперь выведем числа в обратном порядке. Для этого создадим переменную со значением 10 и на каждом шаге будем вычитать из него 1. Будем продолжать до тех пор, пока значение переменной не станет единицей, - это остановит выполнение кода:</p>
93
#!/bin/bash number=10 until [ $number -lt 1 ]; do echo "Обратный отсчёт: $number" number=$((number - 1)) done<p>Результат работы кода:</p>
93
#!/bin/bash number=10 until [ $number -lt 1 ]; do echo "Обратный отсчёт: $number" number=$((number - 1)) done<p>Результат работы кода:</p>
94
<em>Скриншот: Bash / Skillbox Media</em><p><strong>Case</strong> - конструкция Bash для обработки множественных условий. В других языках программирования эта конструкция называется switch. Её используют, например, чтобы сравнить переменные с несколькими шаблонами.</p>
94
<em>Скриншот: Bash / Skillbox Media</em><p><strong>Case</strong> - конструкция Bash для обработки множественных условий. В других языках программирования эта конструкция называется switch. Её используют, например, чтобы сравнить переменные с несколькими шаблонами.</p>
95
<p>В общем виде конструкция case в Bash выглядит так:</p>
95
<p>В общем виде конструкция case в Bash выглядит так:</p>
96
case variable in pattern1) command1 ;; pattern2) command2 ;; pattern3) command3 ;; *) command_default ;; esac<p>В ней:</p>
96
case variable in pattern1) command1 ;; pattern2) command2 ;; pattern3) command3 ;; *) command_default ;; esac<p>В ней:</p>
97
<ul><li>variable - переменная, которую нужно проверить.</li>
97
<ul><li>variable - переменная, которую нужно проверить.</li>
98
<li>pattern1, pattern2, pattern3 - возможные значения, среди которых скрипт будет искать истинное.</li>
98
<li>pattern1, pattern2, pattern3 - возможные значения, среди которых скрипт будет искать истинное.</li>
99
<li>command1, command2, command3 - команды, которые выполнятся, если значение переменной совпадёт с соответствующим шаблоном.</li>
99
<li>command1, command2, command3 - команды, которые выполнятся, если значение переменной совпадёт с соответствующим шаблоном.</li>
100
<li>*) - шаблон по умолчанию, содержимое которого выполнится в любом случае.</li>
100
<li>*) - шаблон по умолчанию, содержимое которого выполнится в любом случае.</li>
101
<li>command_default - команды по умолчанию.</li>
101
<li>command_default - команды по умолчанию.</li>
102
<li>esac - ключевое слово, которое указывает на завершение конструкции case: esac - буквально case наоборот.</li>
102
<li>esac - ключевое слово, которое указывает на завершение конструкции case: esac - буквально case наоборот.</li>
103
</ul><p>Напишем скрипт, который при запуске выводит в терминал текущий день недели. Для этого используем case, а переменной date присвоим значение date +%u. Эта команда обращается к утилите date - встроенному инструменту Linux, который отслеживает дату и время, и возвращает числовое значение дня недели (1 - понедельник, 2 - вторник и так далее).</p>
103
</ul><p>Напишем скрипт, который при запуске выводит в терминал текущий день недели. Для этого используем case, а переменной date присвоим значение date +%u. Эта команда обращается к утилите date - встроенному инструменту Linux, который отслеживает дату и время, и возвращает числовое значение дня недели (1 - понедельник, 2 - вторник и так далее).</p>
104
<p>Вот как выглядит код этого скрипта:</p>
104
<p>Вот как выглядит код этого скрипта:</p>
105
#!/bin/bash day=$(date +%u) case $day in 1) echo "Сегодня понедельник" ;; 2) echo "Сегодня вторник" ;; 3) echo "Сегодня среда" ;; 4) echo "Сегодня четверг" ;; 5) echo "Сегодня пятница" ;; 6) echo "Сегодня суббота" ;; *) echo "Неверное значение" ;; esac<p>А вот что он выводит в терминал:</p>
105
#!/bin/bash day=$(date +%u) case $day in 1) echo "Сегодня понедельник" ;; 2) echo "Сегодня вторник" ;; 3) echo "Сегодня среда" ;; 4) echo "Сегодня четверг" ;; 5) echo "Сегодня пятница" ;; 6) echo "Сегодня суббота" ;; *) echo "Неверное значение" ;; esac<p>А вот что он выводит в терминал:</p>
106
<em>Скриншот: Bash / Skillbox Media</em><p>Функции в Bash - небольшие фрагменты кода, который можно написать один раз и повторно использовать в разных местах скрипта. Например, если в коде вам надо часто вычислять среднее значение нескольких чисел, то этот алгоритм можно оформить в виде функции.</p>
106
<em>Скриншот: Bash / Skillbox Media</em><p>Функции в Bash - небольшие фрагменты кода, который можно написать один раз и повторно использовать в разных местах скрипта. Например, если в коде вам надо часто вычислять среднее значение нескольких чисел, то этот алгоритм можно оформить в виде функции.</p>
107
<p>В общем виде функции в Bash выглядят так:</p>
107
<p>В общем виде функции в Bash выглядят так:</p>
108
имя_функции () { тело_функции }<p>В ней:</p>
108
имя_функции () { тело_функции }<p>В ней:</p>
109
<ul><li>имя_функции - идентификатор, с помощью которого функцию можно будет вызвать в любом месте кода.</li>
109
<ul><li>имя_функции - идентификатор, с помощью которого функцию можно будет вызвать в любом месте кода.</li>
110
<li>тело_функции - команды, которые функция выполняет.</li>
110
<li>тело_функции - команды, которые функция выполняет.</li>
111
</ul><p>В Bash есть два способа вывести результат работы функции:</p>
111
</ul><p>В Bash есть два способа вывести результат работы функции:</p>
112
<p><strong>С помощью return.</strong>Ключевое слово return возвращает только целые числа от 0 до 255. Этот способ чаще всего используют для вывода кода ошибок или служебных флагов - чисел, которые подсказывают программе, что следует делать дальше.</p>
112
<p><strong>С помощью return.</strong>Ключевое слово return возвращает только целые числа от 0 до 255. Этот способ чаще всего используют для вывода кода ошибок или служебных флагов - чисел, которые подсказывают программе, что следует делать дальше.</p>
113
check_even() { if (( $1 % 2 == 0 )); then return 0 else return 1 fi }<p>С помощью echo. Если надо вывести строку или число, которое не входит в промежуток 0-255, лучше всего использовать ключевое слово echo.</p>
113
check_even() { if (( $1 % 2 == 0 )); then return 0 else return 1 fi }<p>С помощью echo. Если надо вывести строку или число, которое не входит в промежуток 0-255, лучше всего использовать ключевое слово echo.</p>
114
check_even() { if (( $1 % 2 == 0 )); then return 0 # Чётное else return 1 # Нечётное fi }<p>Давайте напишем функцию, которая ищет в папке файлы по названию, переданному пользователем в качестве аргумента.</p>
114
check_even() { if (( $1 % 2 == 0 )); then return 0 # Чётное else return 1 # Нечётное fi }<p>Давайте напишем функцию, которая ищет в папке файлы по названию, переданному пользователем в качестве аргумента.</p>
115
<p>Код скрипта:</p>
115
<p>Код скрипта:</p>
116
#!/bin/bash # Функция для поиска файла по имени check_file() { if [ -e "$1" ]; then echo "Файл '$1' существует." else echo "Файл '$1' не найден." fi } check_file "file.txt" # Вызываем функцию и передаём ей имя файла<p>Что скрипт выведет в терминал:</p>
116
#!/bin/bash # Функция для поиска файла по имени check_file() { if [ -e "$1" ]; then echo "Файл '$1' существует." else echo "Файл '$1' не найден." fi } check_file "file.txt" # Вызываем функцию и передаём ей имя файла<p>Что скрипт выведет в терминал:</p>
117
<em>Скриншот: Bash / Skillbox Media</em><ul><li>Bash - командная оболочка Linux и одноимённый язык программирования.</li>
117
<em>Скриншот: Bash / Skillbox Media</em><ul><li>Bash - командная оболочка Linux и одноимённый язык программирования.</li>
118
<li>С помощью Bash можно разрабатывать скрипты для автоматизации рутинных задач. Например, можно создать скрипт, который будет автоматически переименовывать файлы по шаблону.</li>
118
<li>С помощью Bash можно разрабатывать скрипты для автоматизации рутинных задач. Например, можно создать скрипт, который будет автоматически переименовывать файлы по шаблону.</li>
119
<li>Bash поддерживает работу с переменными, функциями, циклами, математическими вычислениями, файловой системой компьютера и операциями ввода-вывода.</li>
119
<li>Bash поддерживает работу с переменными, функциями, циклами, математическими вычислениями, файловой системой компьютера и операциями ввода-вывода.</li>
120
<li>Скрипты на Bash можно писать в любом текстовом редакторе, но удобнее делать это в специальных средах - например, в Vim, Nano или VS Code.</li>
120
<li>Скрипты на Bash можно писать в любом текстовом редакторе, но удобнее делать это в специальных средах - например, в Vim, Nano или VS Code.</li>
121
</ul><a>Практический курс: "Администрирование ОС Linux" Узнать о курсе</a>
121
</ul><a>Практический курс: "Администрирование ОС Linux" Узнать о курсе</a>