Программирование на bash - часть 1

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

Что такое «сценарий»?

В основном мы говорим, что это файл, содержащий код, написанный на определенном языке программирования, который система использует для определенной задачи. Ему не нужен внешний ввод или графический интерфейс, но он должен вызывать вывод обработанных данных (даже если пользователь этого не видит).

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

Структура скрипта

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

#! / Bin / Баш

Это указывает системе использовать консоль для запуска файла. Кроме того, символ # позволяет писать комментарии. Чтобы создать простейший пример, мы добавляем еще одну строку, показанную на следующем изображении:

Команда echo отображает на экране сообщение, в данном случае типичное «Hello world!». Если мы сохраним его и выполним с помощью консоли, мы увидим результат.

Основные команды

Следующие команды являются общими и очень полезными для любого типа программ. Мы уточняем, что их намного больше, но пока мы рассмотрим следующее.

Псевдонимы: позволяет заменить строку слов более короткой, что позволяет сократить код.

# создать псевдоним с именем per с адресом псевдонима папки #Downloads per = '/ home / user / Downloads' # Каждый раз, когда мы хотим его использовать, нам просто нужно вызвать # новое слово per # Чтобы уничтожить этот псевдоним, мы используйте unalias unalias для

break: позволяет сразу выйти из цикла for, while, until или select (мы подробно изучим циклы позже)

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

continue - аналогично break, за исключением того, что игнорирует текущий цикл и переходит к следующему.

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

declare: объявляет переменные и присваивает им значения, как и набор (они работают так же). Мы можем комбинировать его с некоторыми параметрами: -i объявляет целые числа; -r для переменных только для чтения, значение которых нельзя изменить; –A для массивов или «массивов»; -f для функций; -x для переменных, которые можно «экспортировать» за пределы среды самого скрипта.

объявить –i num = 12 объявить –x pi = 3.14

help: показывает справку по конкретной команде.

jobs: показывает запущенные процессы.

# С –c мы показываем имя команд, с –p # - pid (идентификатор процесса) каждого процесса. вакансии -cp

let: оценить арифметическое выражение

let a = 11 let a = a + 5 # Наконец, мы печатаем значение a, которое равно 16 echo "11 + 5 = $ a"

local: создать локальные переменные, которые желательно использовать в функциях самого скрипта, чтобы избежать ошибок. Вы можете использовать те же функции, что и команда declare.

local v1 = "Это локальная переменная"

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

printf: позволяет распечатать данные и отформатировать их. У него много вариантов, поэтому мы упомянем несколько.

#% f выводится как плавающее число, n для новой # строки printf "% fn" 5 5.000000 # & d позволяет передавать десятичные числа в качестве аргументов printf "Имеется% d заказов на сумму в% d долларов. n" 20 500 Есть 20 заказов на сумму 500 долларов.

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

echo "Введите свое имя и нажмите ENTER" # Прочтите имя переменной прочитайте имя echo "Ваше имя $ name"

тип: описывает команду и ее поведение. Может быть полезно узнать определения данных для каждой команды.

type –a '[' #type сообщает нам, что [- встроенная команда Shell [встроенная команда Shell # -a позволяет найти каталоги, содержащие # исполняемый файл с записанным именем. [это / usr / bin / [

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

# Мы видим наши текущие ограничения ulimit –a # -f позволяет ограничить пользователей, не позволяющих # создавать файлы размером более 512000 КБ (500 # МБ) 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] [jobpec…] или jobs -x command [args]

    -eq -gt -lt не принимать переменные с десятичной запятой, между форумом и форумом я обнаружил, что bc - хороший союзник:
    if [`echo 9.999> 10 | bc` -eq 1]; тогда
    echo "9.999 10 больше XNUMX, убедитесь, что ваш процессор все еще работает"
    еще
    echo «9.999 не больше 10, все работает нормально
    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.   Guille сказал

    По совпадению, в колледже мы используем сценарии bash, поэтому данных 10, очень хорошо!

  9.   Алекс Ви сказал

    версию в формате pdf скачать было бы хорошо !! 😀

  10.   Марко Антонио Де Фуэнтес сказал

    Очень хороший сайт. Я наконец нашел что-то полезное. Спасибо.