Руководство для начинающих по основам сценариев оболочки
Термин «сценарии оболочки» часто упоминается на форумах Linux, но многие пользователи не знакомы с ним. Изучение этого простого и мощного метода программирования поможет вам сэкономить время, лучше изучить командную строку и избавиться от утомительных задач по управлению файлами..
Что такое сценарии оболочки?
Быть пользователем Linux означает играть с командной строкой. Нравится вам это или нет, есть только некоторые вещи, которые гораздо проще сделать с помощью этого интерфейса, чем указывать и нажимать. Чем больше вы используете и изучаете командную строку, тем больше вы видите ее потенциал. Ну, сама командная строка - это программа: оболочка. Большинство дистрибутивов Linux сегодня используют Bash, и это то, что вы действительно вводите команды.
Теперь некоторые из вас, кто использовал Windows до использования Linux, могут помнить командные файлы. Это были небольшие текстовые файлы, которые можно было заполнить командами для выполнения, и Windows запускала их по очереди. Это был умный и аккуратный способ сделать что-то, например, запустить игры в компьютерном классе вашей средней школы, когда вы не можете открывать системные папки или создавать ярлыки. Пакетные файлы в Windows, хотя и полезны, являются дешевой имитацией сценариев оболочки.
Сценарии оболочки позволяют нам программировать команды в цепочках и заставлять систему выполнять их в виде события сценария, как пакетные файлы. Они также допускают гораздо более полезные функции, такие как подстановка команд. Вы можете вызвать команду, такую как date, и использовать ее вывод как часть схемы именования файлов. Вы можете автоматизировать резервное копирование, и к каждому скопированному файлу может быть добавлена текущая дата в конце его имени. Скрипты - это не просто вызовы команд. Это программы сами по себе. Сценарии позволяют использовать функции программирования - такие как циклы for, операторы if / 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 ~ / somecrazyfolder
./ script1
Чтобы было удобнее, вы можете поместить скрипты в папку «bin» в вашем домашнем каталоге:
~ / Бен
Во многих современных дистрибутивах эта папка больше не создается по умолчанию, но вы можете ее создать. Обычно там хранятся исполняемые файлы, которые принадлежат вашему пользователю, а не другим пользователям. Размещая скрипты здесь, вы можете просто запустить их, набрав их имя, как и другие команды, вместо того, чтобы обходиться и использовать префикс «./»..
Перед тем, как вы назовете сценарий, вы должны выполнить следующую команду, чтобы проверить, установлена ли у вас программа, использующая это имя:
какая [команда]
Многие люди называют свои ранние сценарии «тестовыми», и когда они пытаются запустить его в командной строке, ничего не происходит. Это потому, что он конфликтует с командой test, которая ничего не делает без аргументов. Всегда следите за тем, чтобы имена ваших скриптов не конфликтовали с командами, в противном случае вы можете обнаружить, что делаете то, что не собираетесь делать!
Руководство по написанию сценариев
Как я упоминал ранее, каждый файл скрипта по сути представляет собой простой текст. Это не значит, что вы можете писать то, что вы хотите, все так или иначе. При попытке выполнения текстового файла оболочки будут анализировать их, чтобы выяснить, являются ли они скриптами или нет, и как правильно обрабатывать все. Из-за этого есть несколько рекомендаций, которые нужно знать.
- Каждый скрипт должен быть с «#! / Bin / bash»
- Каждая новая строка - это новая команда
- Строки комментариев начинаются с #
- Команды окружены ()
Hash-Bang Hack
Когда оболочка анализирует текстовый файл, самый прямой способ определить файл как скрипт - это сделать первую строку:
#! / Bin / Баш
Если вы используете другую оболочку, укажите здесь ее путь. Строки комментариев начинаются с хэшей (#), но добавление после этого взрыва (!) И пути к оболочке является своего рода хаком, который обходит это правило комментариев и заставляет скрипт выполняться с оболочкой, на которую указывает эта строка.
Новая строка = новая команда
Каждая новая строка должна рассматриваться как новая команда или компонент более крупной системы. Например, операторы / then / else будут занимать несколько строк, но каждый компонент этой системы находится в новой строке. Не позволяйте команде перетекать в следующую строку, так как это может усечь предыдущую команду и вызвать ошибку в следующей строке. Если ваш текстовый редактор делает это, вы должны отключить перенос текста, чтобы быть в безопасности. Вы можете отключить перенос текста в нано-бит, нажав ALT + L.
Комментарий часто с #s
Если вы начинаете строку с #, строка игнорируется. Это превращает его в строку комментария, где вы можете напомнить себе о том, что выглядела предыдущая команда или что будет делать следующая команда. Снова отключите перенос текста или разбейте свой комментарий на несколько строк, которые начинаются с хэша. Использование большого количества комментариев является хорошей практикой, поскольку позволяет вам и другим людям легче настраивать ваши сценарии. Единственное исключение - вышеупомянутый взлом Hash-Bang, так что не следуйте #s с! S. ;-)
Команды заключены в круглые скобки
В прежние времена подстановки команд выполнялись с одинарными галочками (', разделяет клавишу ~). Мы пока не будем касаться этого, но, поскольку большинство людей начинают изучать основы, вероятно, стоит упомянуть, что вместо них следует использовать скобки. Это происходит главным образом потому, что когда вы вкладываете - помещаете команды в другие команды - круглые скобки работают лучше.
Ваш первый сценарий
Давайте начнем с простого сценария, который позволяет копировать файлы и добавлять даты в конец имени файла. Давайте назовем это «datecp». Сначала давайте проверим, не конфликтует ли это имя с чем-то:
Вы можете видеть, что не выводится команда which, поэтому мы все готовы использовать это имя.
Давайте создадим пустой файл в папке ~ / bin:
нажмите ~ / bin / datecp
И давайте изменим разрешение сейчас, прежде чем мы забудем:
Давайте начнем строить наш скрипт тогда. Откройте этот файл в любом текстовом редакторе. Как я уже сказал, мне нравится простота нано.
nano ~ / bin / datecp
И давайте продолжим и добавим обязательную первую строку и комментарий о том, что делает этот скрипт.
Далее, давайте объявим переменную. Если вы когда-либо занимались алгеброй, вы, вероятно, знаете, что это такое. Переменная позволяет нам хранить информацию и делать что-то с ней. Переменные могут «расширяться» при обращении в другое место. То есть вместо отображения своего имени они будут отображать свое сохраненное содержимое. Позже вы можете указать той же переменной для хранения другой информации, и любая последующая инструкция будет использовать новую информацию. Это действительно модный заполнитель.
Что мы поместим в переменную? Что ж, давайте сохраним дату и время! Для этого мы вызовем команду date.
Посмотрите на скриншот ниже, чтобы узнать, как создать вывод команды date:
Вы можете видеть, что, добавляя различные переменные, начинающиеся с%, вы можете изменить вывод команды на то, что вы хотите. Для получения дополнительной информации, вы можете посмотреть на странице руководства для команды даты.
Давайте используем последнюю итерацию команды date «date +% m_% d_% y-% H.% M.% S» и используем ее в нашем сценарии..
Если бы мы сохранили этот скрипт прямо сейчас, мы могли бы запустить его, и он бы дал нам вывод команды date, как мы и ожидали:
Но давайте сделаем что-то другое. Давайте дадим имя переменной, например date_formatted для этой команды. Правильный синтаксис для этого следующий:
переменная = $ (аргументы -options команды)
А для нас мы бы построили это так:
date_formatted = $ (дата +% m_% d_% y-% H.% M.% S)
Это то, что мы называем подстановкой команд. По сути, мы говорим bash, что всякий раз, когда появляется переменная «date_formatted», выполнить команду в скобках. Затем, любой вывод, который выдают команды, должен отображаться вместо имени переменной «date_formatted».
Вот пример сценария и его вывод:
Обратите внимание, что в выводе есть два пробела. Пробел внутри кавычек команды echo и пробел перед переменной оба отображаются. Не используйте пробелы, если вы не хотите, чтобы они появлялись. Также обратите внимание, что без этой добавленной строки «эхо» скрипт не даст абсолютно никакого вывода.
Давайте вернемся к нашему сценарию. Давайте теперь добавим в копирующей части команды.
cp -iv $ 1 $ 2. $ date_formatted
Это вызовет команду копирования с опциями -i и -v. Первый запросит у вас подтверждение перед перезаписью файла, а второй покажет, что происходит в командной строке..
Далее вы можете видеть, что я добавил опцию «$ 1». При создании сценария знак доллара ($), за которым следует число, будет обозначать этот пронумерованный аргумент сценария при его вызове. Например, в следующей команде:
cp -iv Trogdor2.mp3 ringtone.mp3
Первый аргумент - «Trogdor2.mp3», а второй аргумент - «ringtone.mp3»..
Оглядываясь назад на наш скрипт, мы видим, что мы ссылаемся на два аргумента:
Это означает, что когда мы запускаем скрипт, нам нужно предоставить два аргумента для корректной работы скрипта. Первый аргумент, $ 1, - это файл, который будет скопирован и заменен в качестве первого аргумента команды «cp -iv»..
Второй аргумент, $ 2, будет действовать как выходной файл для той же команды. Но вы также можете видеть, что это другое. Мы добавили точку и обратились к переменной date_formatted сверху. Любопытно, что это делает?
Вот что происходит при запуске скрипта:
Вы можете видеть, что выходной файл указан как то, что я ввел за 2 доллара, затем точка, затем вывод команды date! Имеет смысл, верно?
Теперь, когда я запускаю команду datecp, он запустит этот скрипт и позволит мне скопировать любой файл в новое место, и автоматически добавит дату и время в конец имени файла. Полезно для архивирования вещей!
Сценарии оболочки - это основа работы вашей ОС для вас. Вам не нужно изучать новый язык программирования, чтобы это произошло. Попробуйте написать сценарий дома с помощью некоторых основных команд и начните думать о том, что вы можете использовать для этого.
Ты сценарий? Есть ли совет для новичков? Поделитесь своими мыслями в комментариях! Это еще не все в этой серии!