Програмування в bash - частина 1

Хоча ми зазвичай використовуємо його для адміністративних операцій або управління файлами, файл комфорт de Linux розширює свої функціональні можливості далеко за межі цієї мети, дозволяючи нам програмувати scripts Цей посібник не призначений як повне посилання на програмування Bash, а скоріше як вступ до основних команд та структур, що дозволить нам розширити потужність нашої системи GNU / Linux.

Що таке "сценарій"?

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

Мова, якою користується Bash, визначається власним інтерпретатором і поєднує синтаксис інших оболонок, таких як оболонка Korn (ksh) або C Shell (csh). Багато команд, які зазвичай використовуються в консолі, також можуть використовуватися в сценаріях, за винятком тих, які суворо стосуються певного розподілу.

Структура сценарію

Для початку ми повинні мати текстовий редактор і бажання програмувати. Файли, які ми зберігаємо з розширенням .sh, можуть бути виконані (або інтерпретовані) консоллю, якщо перший рядок такий:

#! / бін / баш

Це говорить системі використовувати консоль для запуску файлу. Крім того, символ # дозволяє писати коментарі. Для створення найпростішого прикладу ми додаємо ще один рядок, видно на наступному зображенні:

Команда echo відображає на екрані повідомлення, в даному випадку типове "Привіт світ!" Якщо ми збережемо його та виконаємо за допомогою консолі, ми побачимо результат.

Основні команди

Наступні команди є загальними та дуже корисними для будь-якого типу програми. Ми уточнюємо, що їх набагато більше, але наразі ми розглянемо наступне.

Псевдоніми: дозволяє замінити рядок слів на коротший, що дозволяє зменшити код.

#create псевдонім, що викликається per з адресою #Downloads, псевдонім папки per = '/ home / user / Downloads' # Кожного разу, коли ми хочемо його використовувати, нам просто потрібно викликати # нове слово на # Щоб знищити цей псевдонім, ми використовувати unalias unalias per

перерва: дозволяє негайно вийти з циклу for, while, до або вибрати цикл (ми детально вивчимо цикли пізніше)

# Створити цикл, який буде присвоювати числа від 1 до 5 # для кожного "повороту циклу" для лічильника в 1 2 3 4 5 do # Ми друкуємо поточне значення змінної #counter, яке аналізується символом $ echo "$ counter" #Якщо значення лічильника дорівнює 3, якщо [$ counter –eq 3], тоді #The break виходить із циклу для break fi done

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

# Створіть цикл, який буде присвоювати числа від 1 до 5 # для кожного "повороту циклу" для лічильника в 1 2 3 4 5 робити # Якщо значення лічильника дорівнює 3, якщо [$ counter –eq 3], тоді # Продовжити запобігає аналізу решти поточного циклу # шляхом переходу до наступного раунду, тобто # значення 3 не буде надруковано. продовжити fi echo "$ counter" зроблено

оголосити: оголошує змінні та присвоює їм значення, як і набір (вони працюють однаково). Ми можемо поєднати це з деякими опціями: -я оголошую цілі числа; -r для змінних лише для читання, значення яких не можна змінити; –A для масивів або “масивів”; -f для функцій; -x для змінних, які можна "експортувати" поза середовищем самого сценарію.

оголосити –i num = 12 оголосити –x pi = 3.14

Довідка: показує довідку для певної команди

Jobs: показує запущені процеси.

# За допомогою –c ми показуємо ім’я команд, за допомогою –p # - pid (ідентифікатор процесу) кожного процесу. вакансії -cp

нехай: обчислює арифметичний вираз

нехай a = 11 нехай a = a + 5 # Нарешті ми виводимо значення a, яке дорівнює 16 ехо "11 + 5 = $ a"

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

local v1 = "Це локальна змінна"

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

printf: дозволяє друкувати дані та форматувати їх. У нього багато варіантів, тому ми згадаємо декілька.

#% f друкується як плаваюче число, n для нового # рядка printf "% fn" 5 5.000000 # & d дозволяє передавати десяткові числа як аргументи printf "Існує% d замовлень, оцінених у% d доларів.n" 20 500 Є 20 замовлень вартістю 500 доларів.

read: прочитати рядок із стандартного вводу (модуль, який використовується для завантаження даних через клавіатуру). Ми можемо передавати такі варіанти, як: -t, щоб дати обмежений час читання; -a таким чином, що кожне слово призначається позиції в масиві анам; -d використовувати роздільник, який буде записаний в кінці рядка; серед інших.

echo "Введіть своє ім'я та натисніть ENTER" # Прочитайте ім'я змінної read name echo "Ваше ім'я $ name"

type: описує команду та її поведінку. Може бути корисним з’ясувати визначення даних для кожної команди.

type –a '[' #type повідомляє нам, що [є вбудованою командою оболонки [є вбудованою оболонкою # -a дозволяє знайти каталоги, які містять # виконуваний файл із записаним ім'ям. [є / usr / bin / [

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

# Ми бачимо, що наші поточні обмеження ulimit –a # -f дозволяє обмежити користувачів тим, що вони не можуть # створювати файли розміром більше 512000 Кб (500 #Mb) ulimit –f 512000 # -v обмежує віртуальну пам’ять процесу. ulimit –v 512000

зачекати: дочекайтеся продовження певного процесу або завдання

# Сценарій чекає на процес pid # 2585

почекай 2585

Інші корисні команди, які ми можемо додати до сценаріїв, представлені символами.

!!: запустіть останню команду знову

! wer: виконує останню команду, яка розпочалася з виразу “wer”.

'==', '! =', '>', '<', '> =' та '<=': реляційні оператори.

|: Оператор АБО зазвичай використовувався для об'єднання двох регулярних виразів.

: escape команда, яка дозволяє форматувати вирази. Наприклад: a для звукового сповіщення, n для нового рядка, b для зворотного простору тощо.

Дякую Хуану Карлосу Ортісу!

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

10 коментарі, залиште свій

Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   Середній Важкий - сказав він

    Чудово! У будь-якому випадку, 2 коментарі: Тегу Ubuntu вдвічі більше, оскільки він узагальнює щось загальне. І якщо ці навчальні посібники продовжуватимуть розвиватися, було б добре, якщо вони пов’язані між собою….
    Окрім цього, цей хід цікавий!

  2.   Давайте використовувати Linux - сказав він

    Гарний внесок! Чудово!

  3.   Джованні Ескобар Соса - сказав він

    Бракує лише посилань для тих, хто хоче детальніше розглянути цю справу. Деякі хороші, хоча їх не так просто знайти в наших країнах
    - Практичний посібник з команд, редакторів та програмування оболонки Linux, Марк Собел (глава 8)
    - Pro Bash Programming, Кріс Ф. А. Джонсон (хоча це для тих, хто має інші посилання або трохи більше знань).

    Хороша стаття.

  4.   Давайте використовувати Linux - сказав він

    Гарне побачення! Дякую!

  5.   Патрісіо Дорантес Джамарне - сказав він

    : @ Функція "увійти як" видалила мій попередній коментар, тому я підсумую його далі:
    вакансії -cp
    bash: jobs: -c: недійсний варіант
    Jobs: використання: jobs [-lnprs] [jobspec…] або команда jobs -x [аргументи]

    -eq -gt -lt не приймає змінних з десятковою комою, між форумом і форумом я виявив, що bc є хорошим союзником:
    якщо [`echo 9.999> 10 | bc` -eq 1]; тоді
    echo "9.999 більше 10, переконайтесь, що ваш процесор все ще працює"
    ще
    echo «9.999 10 не більше XNUMX, все працює нормально
    fi

  6.   Не з Брукліна - сказав він

    У цій публікації дуже добре узагальнено всі загальні сценарії Bash:
    http://www.aboutlinux.info/2005/10/10-seconds-guide-to-bash-shell.html

    На цьому сайті ви знайдете безліч запитань та відповідей щодо особливостей bash:
    http://unix.stackexchange.com/questions/tagged/bash

    Ось декілька справді крутих сценаріїв, і привіт, ви можете їх вивчити, читаючи сценарії інших людей:
    http://snipplr.com/search.php?q=bash&btnsearch=go

  7.   Не з Брукліна - сказав він

    Ви маєте рацію із тим, що говорите, крім bash. У кожній системі, яку я бачив, є bash в / bin / bash.

    Але для python, perl, ruby ​​і т. Д. Це чудово використовувати. я згоден

  8.   Гіля - сказав він

    За збігом обставин, у коледжі ми використовуємо скрипт bash, тож дані 10, дуже добре!

  9.   Алекс VI - сказав він

    PDF-версія для завантаження була б непоганою !! 😀

  10.   Марко Антоніо Де Фуентес - сказав він

    Дуже хороший сайт. Нарешті я знайшов щось корисне. Дякую.