HTML Diff
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>Равно=Не равно!=Меньше&lt;Больше&gt;Строка пустая-zСтрока не пустая-n<strong>Проверка файлов</strong><strong>Операция</strong><strong>Оператор</strong>Файл существует-eОбычный файл-fИсполняемый файл-xДиректория-dФайл доступен для чтения-rФайл доступен для записи-w<strong>Логические операции</strong><strong>Операция</strong><strong>Оператор</strong>Логическое И&amp;&amp;Логическое ИЛИ||<p>Напишем программу, которая в виде аргумента будет получать количество баллов пользователя и сообщать, сдал он экзамен или нет. Договоримся, что для успешной сдачи экзамена надо набрать не менее 85 баллов:</p>
85 <strong>Сравнения чисел</strong><strong></strong><strong>Операция</strong><strong>Оператор</strong>Равно-eqНе равно-neМеньше-ltБольше-gtМеньше или равно-leБольше или равно-ge<strong>Сравнения строк</strong><strong>Операция</strong><strong>Оператор</strong>Равно=Не равно!=Меньше&lt;Больше&gt;Строка пустая-zСтрока не пустая-n<strong>Проверка файлов</strong><strong>Операция</strong><strong>Оператор</strong>Файл существует-eОбычный файл-fИсполняемый файл-xДиректория-dФайл доступен для чтения-rФайл доступен для записи-w<strong>Логические операции</strong><strong>Операция</strong><strong>Оператор</strong>Логическое И&amp;&amp;Логическое ИЛИ||<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>