Посібник для початківців з BASH

Ласкаво просимо до 2-ї частини серії посібника для початківців з BASH, яка унікальна тим, що це єдиний підручник з BASH, написаний новачком для початківців.

Читачі цього посібника нарощують свої знання і, сподіваюся, до кінця зможуть написати кілька досить розумних сценаріїв.

Минулого разу ми покривали створення вашого першого сценарію який просто показував слова "Hello World". Він охоплює такі теми, як текстові редактори, як відкрити вікно терміналу, куди розмістити свої скрипти, як відображати слова "Hello World" та деякі більш тонкі елементи на екранних символах, таких як лапки ("").

Цей розділ охоплює вхідні параметри. Існує інші довідники які навчають такого роду речей, але занадто часто вони стрибають у якісь досить низькорівневі речі і, можливо, надають занадто багато інформації.

Сценарій параметрів додає персоналізацію

У сценарії «Hello World» з останнього підручника все було дуже статично. Сценарій взагалі нічого не зробив.

Як ми можемо покращити сценарій «Hello World»?

А як щодо сценарію, який вітає людину, яка його запускає? Замість того, щоб сказати «Hello World» він скаже «Hello Gary», «Hello Tim» або «Hello Dolly».

Без можливості приймати вхідні параметри нам потрібно було б написати три скрипти "hellogary.sh", "hellotim.sh" і "hellodolly.sh".

Як створити параметр

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

Для цього відкрийте вікно терміналу (CTRL + ALT + Т) і перейдіть до папки зі скриптами, ввівши наступне: (про команду cd)

cd скрипти

Створіть новий сценарій під назвою greetme.sh, ввівши наступне: (про сенсорну команду)

торкніться greetme.sh

Відкрийте сценарій у своєму улюбленому редакторі, ввівши наступне: (про нанокоманду)

nano greetme.sh

Введіть наступний текст у нано:

#!/bin/bash
луна "привіт $@"

Натисніть CTRL і О щоб зберегти файл, а потім CTRL і X щоб закрити файл.

Базовий сценарій Bash для Linux з параметрами

Щоб запустити сценарій, введіть наступне в командний рядок, замінивши на своє ім’я.

sh greetme.sh Tim

Якщо я запускаю сценарій зі своїм іменем, він відображає слова «Привіт, Гарі».

Linux запускає базовий скрипт з параметрами

Перший рядок містить рядок #!/bin/bash, який використовується для ідентифікації файлу як сценарію bash.

У другому рядку використовується оператор echo для повторення слова hello, а потім є дивна нотация $@. (про команду ехо)

$@ розгортається, щоб відобразити кожен параметр, який було введено разом із назвою сценарію. Отже, якщо ви введете «sh greetme.sh tim», відобразиться слова «hello tim». Якщо ви введете "greetme.sh tim smith", то відобразяться слова "hello tim smith".

Використання команд Echo

Було б непогано, щоб сценарій greetme.sh просто привітався, використовуючи лише ім’я. Ніхто не каже: «Привіт, Гарі Ньюелл», коли зустрічає когось, але вони можуть сказати: «Привіт, Гері».

Давайте змінимо скрипт так, щоб він використовував лише перший параметр. Відкрийте сценарій greetme.sh в nano, ввівши наступне:

nano greetme.sh

Змініть сценарій так, щоб він виглядав так:

#!/bin/bash
echo "привіт, $1"

Збережіть скрипт, натиснувши CTRL і О а потім вийдіть, натиснувши CTRL і X

Скрипт Linux Bash з індивідуальним параметром

Запустіть сценарій, як показано нижче (замініть назву на своє):

sh greetme.sh Гері Ньюелл

Коли ви запустите сценарій, він просто скаже: «Привіт, Гарі» (або, сподіваюся, «привіт» і як би вас не звали).

Linux запускає сценарій Bash з одним параметром

1 після символу $ в основному говорить про команду echo, використовуйте перший параметр. Якщо ви заміните $1 на $2, то відобразиться «привіт, новинку» (або будь-яке ваше прізвище). Ви також можете додати $2 після $1, щоб отримати повне ім'я.

Скрипт Linux Bash з кількома параметрами

Якщо запустити його з кількома параметрами, вони відображатимуться в місцях, що відповідають порядку їх введення.

Сценарій запуску Linux із кількома параметрами

До речі, якщо ви замінили $2 на $3 і запустили сценарій лише з 2 параметрами, результатом буде просто «Привіт».

Як відобразити кількість використовуваних параметрів

Можна відображати й обробляти кількість фактично введених параметрів, а наступні посібники покажуть вам, як використовувати кількість параметрів для цілей перевірки.

Щоб відобразити кількість введених параметрів, відкрийте сценарій greetme.sh (nano greetme.sh) і виправте текст таким чином:

#!/bin/bash
echo "ви ввели $# імена"
луна "привіт $@"

Натисніть CTRL і О щоб зберегти сценарій і CTRL і X щоб вийти з nano.

Параметри кількості сценаріїв Linux Bash

$# у 2-му рядку відображає кількість введених параметрів.

Поки що все це було новим, але не дуже корисним. Кому потрібен скрипт, який просто відображає «привіт»?

Linux запускає сценарій підрахунку параметрів bash

Echo Statements vs. Вхідні параметри

Справжнє використання операторів echo полягає в тому, щоб надати користувачеві багатослівний і змістовний вихід. Якщо ви можете уявити, що хочете зробити щось складне, що передбачає серйозне хрустування чисел та маніпулювання файлами/папками, було б корисно показати користувачеві, що відбувається на кожному кроці спосіб.

Навпаки, вхідні параметри роблять ваш сценарій інтерактивним. Без вхідних параметрів вам знадобляться десятки сценаріїв, які виконують дуже схожі речі, але з дещо різними іменами.

З огляду на все це, є деякі інші корисні вхідні параметри, про які варто знати, і я включаю їх усі в один фрагмент коду.

Відкрийте свій сценарій greetme.sh і внесіть в нього такі зміни:

#!/bin/bash
echo "Назва файлу: $0"
echo "Ідентифікатор процесу: $$"
луна ""
echo "ви ввели $# імена"
луна "привіт $@"

Натисніть CTRL і О щоб зберегти файл і CTRL і X щоб вийти.

Додаткова інформація про сценарій Linux Bash

Тепер запустіть скрипт (замініть його на своє ім’я).

sh greetme.sh 

Цього разу скрипт відображає таке:

Ім'я файлу: greetme.sh
ID процесу: 18595

ви ввели 2 імена
привіт, Гері Ньюелл
Сценарій запуску Linux Bash з додатковою інформацією

$0 у першому рядку сценарію відображає назву сценарію, який ви запускаєте. Зауважте, що це долар нуль, а не долар о.

$$ у другому рядку відображає ідентифікатор процесу сценарію, який ви запускаєте. Чому це корисно? Якщо ви запускаєте сценарій на передньому плані, ви можете скасувати його, просто натиснувши CTRL і C. Якщо ви запустили сценарій у фоновому режимі, і він почав зациклюватися і робити одне і те ж знову і знову або почав завдавати шкоди вашій системі, вам потрібно буде вбити його.

Щоб припинити роботу сценарію у фоновому режимі, вам потрібен ідентифікатор процесу сценарію. Чи не було б добре, якби скрипт надав ідентифікатор процесу як частину свого виводу? (про команди ps і kill)

Щоб завершити...

Нарешті, перш ніж ми закінчимо цю тему, важливо обговорити, куди йде результат. Кожного разу, коли сценарій був запущений до цього часу, результат відображався на екрані.

Досить часто виведення сценарію записується у вихідний файл. Для цього запустіть свій скрипт так:

sh greetme.sh gary > greetme.log

Символ > у наведеній вище команді виводить текст «hello gary» у файл під назвою greetme.log.

Кожен раз, коли ви запускаєте сценарій із символом >, він перезаписує вміст вихідного файлу. Якщо ви бажаєте додати до файлу, замініть > на >>.

Тепер ви зможете писати текст на екран і приймати параметри введення.