Bash для справжніх мужиків - geek s notes universe

Представляємо вам навчальну статтю по bash-скриптів, яка передбачає, що ваші знання bash рівні або близькі до нуля. Обіцяємо, за допомогою цієї статті ви зрозумієте, що створення bash-скриптів - це надзвичайно просто. Однак якщо в цій статті ви все ж не знайдете відповідей на всі ваші запитання (ну, або вам з інших причин знадобиться допомога сторонніх джерел), можете звернутися безпосередньо до нашого адміністратора :)

Отже, приступимо до вивчення командної оболонки Bash.
Давайте почнемо наше навчання з простого скрипта "Hello World".

1. Bash-скрипт Hello World
Для початку необхідно з'ясувати, де знаходиться транслятор. Для цього введіть наступну команду:

Ну, тепер ви повністю готові створити свій перший bash-скрипт:


2. Простий bash-скрипт для резервного копіювання:


3. Змінні
У цьому прикладі ми оголосимо просту bash-змінну і виведемо її на екран за допомогою команди echo.

Скрипт для резервної копії та змінних:


3.1. Глобальні і локальні змінні


4. Передача аргументів на bash-скрипт


5. Виконання команд shell за допомогою bash


6. Читання введених користувачем даних


8.2. Імпорт файлу в масив bash


Виконання bash-скрипта з висновком в файл execution with an output:


9. Bash-скрипти з if / else / fi
9.1. Просте Bash-вираз з if / else
Зверніть увагу на прогалини в дужках [і]! Без цих прогалин, скрипт працювати не буде.


10.2. порівняння рядків
= equal
!= Not equal
greater then
-n s1 string s1 is not empty
-z s1 string s1 is empty


11. Bash перевірка файлу
-b filename - блокування файлу
-c filename - файл містить спец. символи
-d directoryname - перевірка існування директорії
-e filename - перевірка існування файлу
-f filename - перевірка існування НЕдіректоріі
-G filename Check if file exists and is owned by effective group ID.
-g filename true if file exists and is set-group-id.
-k filename Sticky bit
-L filename Symbolic link
-O filename True if file exists and is owned by the effective user id.
-r filename - перевірка доступності файлу
-S filename Check if file is socket
-s filename - перевірка того, що розмір файлу більше нуля
-u filename Check if file set-ser-id bit is set
-w filename - перевірка перезапісиваемості файлу
-x filename - перевірка наповнюваності файлу

Аналогічно для перевірки існування файлу можна іспользоватьe цикл while. Цей скрипт не працюватиме, поки файл існує. Зверніть увагу на bash оператор заперечення "!", Який заперечує функцію -e.

Запуск циклу з командного рядка bash:


12.4. Контролювання циклу bash
Нижче представлений приклад циклу while, контрольованого стандартним вводом. Bash цикл while працює, поки існує перехід від STDOUT до STDIN і до команди read.


16. Лапки в Bash
Лапки є важливим елементом мови bash і bash скриптів. Нижче ви знайдете деякі основи використання лапок в bash.
16.1. Екранування спеціальних символів
Перед тим, як ми приступимо до використання лапок, нам необхідно дізнатися, як екранувати спеціальні символи. Ця процедура дозволить bash безпосередньо розпізнати значення цих символів. Для цього нам потрібно використовувати зворотний слеш "# 092;". наприклад:


16.2. одинарні лапки
Одинарні лапки в bash екранують значення всіх спеціальних символів. Таким чином, спеціальні символи будуть розпізнані буквально. При цьому не можна використовувати одинарні лапки всередині двох Дурги таких же лапок, навіть якщо якась із них екранована зворотним слешем.


16.3. Подвійні лапки
Подвійні лапки використовуються в bash для екранування всіх спеціальних символів, крім "# 036;", "# 092;" і "` ". Всі інші спец. символи будуть розпізнаватися буквально. На відміну від попереднього пункту, всередині подвійних лапок можна використовувати одинарні. Якщо між подвійними лапками потрібно використовувати ще одну прямі подвійні лапки, можна змусити bash розпізнати їх буквально, використовуючи зворотний слеш "# 092;". наприклад:

Позначення ansi-c bash-екранування: # 036; ''. приклад:


17. Арифметичні операції
17.1. Приклад складання за допомогою bash


17.3. Округлення числа з плаваючою точкою


17.4. Bash обчислення з плаваючою точкою


18. Перенаправлення
18.1. STDOUT з bash скрипта в STDERR

Для перевірки перенаправлення STDOUT в STDERR можна перенаправити висновок скрипта в файл:

18.2. STDERR з bash скрипта в STDOUT

Для перевірки перенаправлення STDERR iв STDOUT можна перенаправити висновок скрипта в файл:

18.3. STDOUT на екран
Простим способом перенаправлення STDOUT є просте використання будь-якої команди, оскільки за замовчуванням STDOUT автоматично виводиться на екран. Але для початку створіть файл "file1":

Як ви можете побачити з вищенаведеного прикладу, виконання команди ls викликає STDOUT, який за замовчуванням виводиться на екран.

18.4. STDOUT в файл
Щоб блокувати дефолтний поведінку STDOUT, ми можемо використовувати ">" для перенаправлення виводу в файл:


18.5. STDERR в файл
За замовчуванням, STDERR виводиться на екран:

У наступному прикладі переспрямуємо стандартну помилку (stderr) в файл, а stdout - як за замовчуванням, на екран. Майте на увазі, що STDOUT виводиться на екран, а STDERR записується в файл під наазваніем STDERR:


18.6. STDOUT в STDERR
Також можливо перенаправлення STDOUT і STDERR в один файл. У наступному прикладі переспрямуємо STDOUT в той же дескриптор, що і STDERR. І STDOUT, і STDERR будуть перенаправлені в файл "STDERR_STDOUT".

Тепер файл STDERR_STDOUT містить і STDOUT, і STDERR.

18.7. STDERR to STDOUT
Приклад вище можна переробити так, щоб перенаправляти STDERR в той же дескриптор, що і SDTOUT:


18.8. STDERR і STDOUT в файл
Обидва верхніх прикладу перенаправляли STDOUT і STDERR в файл. Існує й інший спосіб домогтися того ж ефекту: