Руководство для начинающих по разработке сценариев оболочки: основы

Оглавление:

Руководство для начинающих по разработке сценариев оболочки: основы
Руководство для начинающих по разработке сценариев оболочки: основы

Видео: Руководство для начинающих по разработке сценариев оболочки: основы

Видео: Руководство для начинающих по разработке сценариев оболочки: основы
Видео: Google Maps vs Apple Maps vs Waze: какие карты удобнее? - YouTube 2024, Апрель
Anonim
Термин «shell scripting» часто упоминается на форумах Linux, но многие пользователи не знакомы с ним. Изучение этого простого и мощного метода программирования поможет вам сэкономить время, лучше изучить командную строку и изъять утомительные задачи управления файлами.
Термин «shell scripting» часто упоминается на форумах Linux, но многие пользователи не знакомы с ним. Изучение этого простого и мощного метода программирования поможет вам сэкономить время, лучше изучить командную строку и изъять утомительные задачи управления файлами.

Что такое скрипт оболочки?

Быть пользователем Linux означает, что вы играете с командной строкой. Нравится вам это или нет, есть только некоторые вещи, которые выполняются намного легче с помощью этого интерфейса, чем путем указания и нажатия. Чем больше вы используете и изучаете командную строку, тем больше вы видите ее потенциал. Ну, сама командная строка - это программа: оболочка. Большинство дистрибутивов Linux сегодня используют Bash, и именно это вы действительно вводите в команду.

Теперь некоторые из вас, которые использовали Windows перед использованием Linux, могут помнить пакетные файлы. Это были небольшие текстовые файлы, которые вы могли бы заполнить командами для выполнения, и Windows будет запускать их по очереди. Это был умный и аккуратный способ сделать некоторые вещи, например, запустить игры в вашей компьютерной школе средней школы, если вы не можете открыть системные папки или создать ярлыки. Пакетные файлы в Windows, хотя и полезны, являются дешевой имитацией сценариев оболочки.

Сценарии оболочки позволяют нам программировать команды в цепочках и система выполняет их как скриптовое событие, так же как командные файлы. Они также позволяют использовать гораздо более полезные функции, такие как подстановка команд. Вы можете вызвать команду, например date, и использовать ее вывод как часть схемы имен файлов. Вы можете автоматизировать резервное копирование, и каждый скопированный файл может иметь текущую дату, добавленную к концу своего имени. Скрипты - это не просто вызовы команд. Это программы сами по себе. Scripting позволяет использовать функции программирования, такие как «для» циклов, если операторы / then / else и т. Д. - непосредственно в интерфейсе вашей операционной системы. И вам не нужно изучать другой язык, потому что вы используете то, что уже знаете: в командной строке.
Сценарии оболочки позволяют нам программировать команды в цепочках и система выполняет их как скриптовое событие, так же как командные файлы. Они также позволяют использовать гораздо более полезные функции, такие как подстановка команд. Вы можете вызвать команду, например date, и использовать ее вывод как часть схемы имен файлов. Вы можете автоматизировать резервное копирование, и каждый скопированный файл может иметь текущую дату, добавленную к концу своего имени. Скрипты - это не просто вызовы команд. Это программы сами по себе. Scripting позволяет использовать функции программирования, такие как «для» циклов, если операторы / then / else и т. Д. - непосредственно в интерфейсе вашей операционной системы. И вам не нужно изучать другой язык, потому что вы используете то, что уже знаете: в командной строке.

Думаю, это действительно сила сценариев. Вы можете запрограммировать команды, которые вы уже знаете, изучая основные основные языки программирования. Нужно делать что-то повторяющееся и утомительное? Сценарий это! Нужен ярлык для действительно запутанной команды? Сценарий это! Хотите создать действительно простой в использовании интерфейс командной строки? Сценарий это!

Прежде чем вы начнете

Прежде чем мы начнем нашу серию сценариев, давайте рассмотрим некоторые основные сведения. Мы будем использовать оболочку bash, которая используется большинством дистрибутивов Linux. Bash доступен для пользователей Mac OS и Cygwin для Windows. Поскольку он настолько универсален, вы должны иметь возможность сценария независимо от вашей платформы. Кроме того, до тех пор, пока существуют все команды, на которые есть ссылки, скрипты могут работать на нескольких платформах с минимальным требованием.

Сценарии могут легко использовать привилегии «администратора» или «суперпользователя», поэтому лучше проверить скрипты, прежде чем вы их начнете работать. Также используйте здравый смысл, например, убедитесь, что у вас есть резервные копии файлов, на которых вы собираетесь запустить скрипт. Также очень важно использовать правильные параметры, например -i для команды rm, чтобы ваше взаимодействие требовалось. Это может предотвратить некоторые неприятные ошибки. Таким образом, прочитайте скрипты, которые вы загружаете, и будьте осторожны с данными, которые у вас есть, на случай, если все пойдет не так.

По сути, скрипты - это просто текстовые файлы. Вы можете использовать любой текстовый редактор для записи: gedit, emacs, vim, nano … Этот список можно продолжить. Просто не забудьте сохранить его как обычный текст, а не как богатый текст или документ Word. Поскольку я люблю простоту использования, которую предоставляет nano, я буду использовать это.

Разрешения и имена сценариев

Скрипты выполняются как программы, и для этого они должны иметь соответствующие разрешения. Вы можете сделать исполняемые скрипты, выполнив следующую команду:

chmod +x ~/somecrazyfolder/script1

Это позволит любому запустить этот конкретный скрипт. Если вы хотите ограничить его использование только вашим пользователем, вы можете использовать это вместо этого:

chmod u+x ~/somecrazyfolder/script1

Чтобы запустить этот скрипт, вам нужно будет ввести cd в соответствующий каталог, а затем запустить скрипт следующим образом:

cd ~/somecrazyfolder

./script1

Чтобы сделать вещи более удобными, вы можете разместить сценарии в папке «bin» в своем домашнем каталоге:

~/bin

Во многих современных дистрибутивах эта папка больше не создается по умолчанию, но вы можете ее создать. Обычно это когда исполняемые файлы хранятся, принадлежащие вашему пользователю, а не другим пользователям. Поместив здесь сценарии, вы можете просто запустить их, набрав их имя, как и другие команды, вместо того, чтобы использовать cd и использовать префикс «./».

Однако перед тем как вы назовете скрипт, вам нужно выполнить следующую команду, чтобы проверить, установлена ли программа, использующая это имя:

which [command]

Многие люди называют свои ранние сценарии «тестом», и когда они пытаются запустить его в командной строке, ничего не происходит. Это связано с тем, что он конфликтует с командой test, которая ничего не делает без аргументов. Всегда убедитесь, что имена ваших сценариев не конфликтуют с командами, иначе вы можете оказаться в том, что делаете, чего не намерены делать!

Руководство по разработке сценариев

Как я уже упоминал ранее, каждый файл сценария является, по сути, простым текстом.Это не значит, что вы можете написать то, что хотите все волей-неволей. Когда текстовый файл пытается выполнить, оболочки будут анализировать через них для подсказки относительно того, являются ли они сценариями или нет, и как правильно обрабатывать все. Из-за этого есть несколько рекомендаций, которые вам нужно знать.
Как я уже упоминал ранее, каждый файл сценария является, по сути, простым текстом.Это не значит, что вы можете написать то, что хотите все волей-неволей. Когда текстовый файл пытается выполнить, оболочки будут анализировать через них для подсказки относительно того, являются ли они сценариями или нет, и как правильно обрабатывать все. Из-за этого есть несколько рекомендаций, которые вам нужно знать.
  1. Каждый скрипт должен быть с "#! / Bin / bash"
  2. Каждая новая строка - это новая команда
  3. Строки комментариев начинаются с #
  4. Команды окружены ()

Взлом Хэша-Взрыва

Когда оболочка анализирует текстовый файл, самый прямой способ идентифицировать файл как скрипт - это сделать свою первую строку:

#!/bin/bash

Если вы используете другую оболочку, замените ее путь здесь. Строки комментариев начинаются с хешей (#), но добавление бита (!) И пути оболочки после того, как он является своего рода хаком, который обходит это правило комментариев и заставит сценарий выполнить оболочку, на которую указывает эта строка.

Новая строка = новая команда

Каждая новая строка должна считаться новой командой или компонентом более крупной системы. Если операторы / then / else, например, будут принимать несколько строк, но каждый компонент этой системы находится в новой строке. Не позволяйте команде переходить в следующую строку, так как это может урезать предыдущую команду и дать вам ошибку на следующей строке. Если ваш текстовый редактор делает это, вы должны отключить перенос текста, чтобы быть в безопасности. Вы можете отключить перенос текста в нано-бит, нажимая ALT + L.

Комментарий Часто с #s

Если вы начинаете строку с #, строка игнорируется. Это превращает его в строку комментариев, где вы можете напомнить себе, что такое результат предыдущей команды, или что будет делать следующая команда. Опять же, отключите перенос текста или разделите комментарий на несколько строк, которые начинаются с хэша. Использование большого количества комментариев - хорошая практика для сохранения, поскольку это позволяет вам и другим людям легко настраивать ваши сценарии. Единственное исключение - вышеупомянутый взлом Hash-Bang, поэтому не следует #s with! S.;-)

Команды окружены скобками

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

Ваш первый скрипт

Начнем с простого сценария, который позволяет копировать файлы и добавлять даты в конец имени файла. Назовем это «datecp». Сначала давайте проверим, не конфликтует ли это имя с чем-то:

Вы можете видеть, что нет никакой команды какой-либо команды, поэтому мы все настроены на использование этого имени.
Вы можете видеть, что нет никакой команды какой-либо команды, поэтому мы все настроены на использование этого имени.

Давайте создадим пустой файл в папке ~ / bin:

touch ~/bin/datecp

И давайте теперь изменим разрешение, прежде чем мы забудем:
И давайте теперь изменим разрешение, прежде чем мы забудем:
Давайте начнем строить наш скрипт. Откройте этот файл в своем текстовом редакторе. Как я уже сказал, мне нравится простота нано.
Давайте начнем строить наш скрипт. Откройте этот файл в своем текстовом редакторе. Как я уже сказал, мне нравится простота нано.

nano ~/bin/datecp

И, давайте перейдем к первому требованию и дадим комментарий о том, что делает этот скрипт.

Затем давайте объявим переменную. Если вы когда-либо брали алгебру, вы, вероятно, знаете, что это такое. Переменная позволяет нам хранить информацию и делать с ней что-то. Переменные могут «расширяться» при упоминании в другом месте. То есть вместо отображения их имени они будут отображать их сохраненное содержимое. Вы можете позже сказать, что одна и та же переменная хранит различную информацию, и любая инструкция, которая возникает после этого, будет использовать новую информацию. Это действительно причудливый заполнитель.
Затем давайте объявим переменную. Если вы когда-либо брали алгебру, вы, вероятно, знаете, что это такое. Переменная позволяет нам хранить информацию и делать с ней что-то. Переменные могут «расширяться» при упоминании в другом месте. То есть вместо отображения их имени они будут отображать их сохраненное содержимое. Вы можете позже сказать, что одна и та же переменная хранит различную информацию, и любая инструкция, которая возникает после этого, будет использовать новую информацию. Это действительно причудливый заполнитель.

Что мы будем вводить переменной? Ну, давайте будем хранить дату и время! Для этого мы будем называть команду date.

Взгляните на снимок экрана ниже, как построить вывод команды date:

Давайте используем последнюю итерацию команды date, «date +% m_% d_% y-% H.% M.% S» и используем ее в нашем скрипте.

Если бы мы сейчас сохранили этот скрипт, мы могли бы запустить его, и он дал бы нам команду даты, как и следовало ожидать:
Если бы мы сейчас сохранили этот скрипт, мы могли бы запустить его, и он дал бы нам команду даты, как и следовало ожидать:
Image
Image

Но давайте сделаем что-то другое. Давайте дадим имя переменной, например date_formatted для этой команды. Правильный синтаксис для этого заключается в следующем:

variable=$(command –options arguments)

И для нас мы построили бы это так:

date_formatted=$(date +%m_%d_%y-%H.%M.%S)

Это то, что мы называем подстановкой команд. Мы по существу говорим bash, что всякий раз, когда появляется переменная date formatted, для запуска команды в круглых скобках. Затем должен отображаться любой вывод, который выводит команды, вместо имени переменной «date formatted».
Это то, что мы называем подстановкой команд. Мы по существу говорим bash, что всякий раз, когда появляется переменная date formatted, для запуска команды в круглых скобках. Затем должен отображаться любой вывод, который выводит команды, вместо имени переменной «date formatted».

Вот пример скрипта и его вывод:

Image
Image
Обратите внимание, что на выходе есть два пробела. Отображаются пространство внутри кавычек команды эха и пространство перед переменной. Не используйте пробелы, если вы не хотите, чтобы они отображались. Также обратите внимание, что без этой добавленной строки «эхо» сценарий не даст никакого вывода.
Обратите внимание, что на выходе есть два пробела. Отображаются пространство внутри кавычек команды эха и пространство перед переменной. Не используйте пробелы, если вы не хотите, чтобы они отображались. Также обратите внимание, что без этой добавленной строки «эхо» сценарий не даст никакого вывода.

Вернемся к нашему сценарию. Давайте добавим в копирующую часть команды.

cp –iv $1 $2.$date_formatted

Это вызовет команду копирования с параметрами -i и -v. Первый попросит вас проверить, прежде чем перезаписывать файл, а последний отобразит то, что находится в командной строке.
Это вызовет команду копирования с параметрами -i и -v. Первый попросит вас проверить, прежде чем перезаписывать файл, а последний отобразит то, что находится в командной строке.

Затем вы можете увидеть, что я добавил параметр «1 доллар».При написании сценария знак доллара ($), за которым следует число, будет обозначать нумерованный аргумент скрипта при его вызове. Например, в следующей команде:

cp –iv Trogdor2.mp3 ringtone.mp3

Первый аргумент: «Trogdor2.mp3», а второй аргумент - «Öútone.mp3».

Оглядываясь на наш сценарий, мы видим, что мы ссылаемся на два аргумента:

Это означает, что при запуске скрипта нам нужно предоставить два аргумента для правильного запуска сценария. Первый аргумент, $ 1, - это файл, который будет скопирован, и будет заменен первым аргументом команды Äúcp, Äiviv.
Это означает, что при запуске скрипта нам нужно предоставить два аргумента для правильного запуска сценария. Первый аргумент, $ 1, - это файл, который будет скопирован, и будет заменен первым аргументом команды Äúcp, Äiviv.

Второй аргумент, $ 2, будет выступать в качестве выходного файла для той же команды. Но вы также можете видеть, что это по-другому. Мы добавили период, и мы указали переменную, описанную выше, сверху. Любопытно, что это делает?

Вот что происходит при запуске скрипта:

Image
Image

Вы можете видеть, что выходной файл указан как все, что я ввел за $ 2, за которым следует период, а затем вывод команды даты! Имеет смысл, не так ли?

Теперь, когда я запустил команду datecp, она запустит этот скрипт и позволит мне скопировать любой файл в новое место и автоматически добавить дату и время до конца имени файла. Полезно для архивирования!

Shell scripting лежит в основе работы вашей ОС для вас. Вам не нужно изучать новый язык программирования, чтобы это произошло. Попробуйте написать несколько базовых команд дома и подумайте о том, для чего вы можете это использовать.

Вы сценарируете? Есть советы для новичков? Поделитесь своими мыслями в комментариях! В этой серии еще много!

Рекомендуемые: