Что такое скрипт оболочки?
Быть пользователем Linux означает, что вы играете с командной строкой. Нравится вам это или нет, есть только некоторые вещи, которые выполняются намного легче с помощью этого интерфейса, чем путем указания и нажатия. Чем больше вы используете и изучаете командную строку, тем больше вы видите ее потенциал. Ну, сама командная строка - это программа: оболочка. Большинство дистрибутивов Linux сегодня используют Bash, и именно это вы действительно вводите в команду.
Теперь некоторые из вас, которые использовали Windows перед использованием Linux, могут помнить пакетные файлы. Это были небольшие текстовые файлы, которые вы могли бы заполнить командами для выполнения, и Windows будет запускать их по очереди. Это был умный и аккуратный способ сделать некоторые вещи, например, запустить игры в вашей компьютерной школе средней школы, если вы не можете открыть системные папки или создать ярлыки. Пакетные файлы в Windows, хотя и полезны, являются дешевой имитацией сценариев оболочки.
Думаю, это действительно сила сценариев. Вы можете запрограммировать команды, которые вы уже знаете, изучая основные основные языки программирования. Нужно делать что-то повторяющееся и утомительное? Сценарий это! Нужен ярлык для действительно запутанной команды? Сценарий это! Хотите создать действительно простой в использовании интерфейс командной строки? Сценарий это!
Прежде чем вы начнете
Прежде чем мы начнем нашу серию сценариев, давайте рассмотрим некоторые основные сведения. Мы будем использовать оболочку 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, которая ничего не делает без аргументов. Всегда убедитесь, что имена ваших сценариев не конфликтуют с командами, иначе вы можете оказаться в том, что делаете, чего не намерены делать!
Руководство по разработке сценариев
- Каждый скрипт должен быть с "#! / Bin / bash"
- Каждая новая строка - это новая команда
- Строки комментариев начинаются с #
- Команды окружены ()
Взлом Хэша-Взрыва
Когда оболочка анализирует текстовый файл, самый прямой способ идентифицировать файл как скрипт - это сделать свою первую строку:
#!/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» и используем ее в нашем скрипте.
Но давайте сделаем что-то другое. Давайте дадим имя переменной, например date_formatted для этой команды. Правильный синтаксис для этого заключается в следующем:
variable=$(command –options arguments)
И для нас мы построили бы это так:
date_formatted=$(date +%m_%d_%y-%H.%M.%S)
Вот пример скрипта и его вывод:
Вернемся к нашему сценарию. Давайте добавим в копирующую часть команды.
cp –iv $1 $2.$date_formatted
Затем вы можете увидеть, что я добавил параметр «1 доллар».При написании сценария знак доллара ($), за которым следует число, будет обозначать нумерованный аргумент скрипта при его вызове. Например, в следующей команде:
cp –iv Trogdor2.mp3 ringtone.mp3
Первый аргумент: «Trogdor2.mp3», а второй аргумент - «Öútone.mp3».
Оглядываясь на наш сценарий, мы видим, что мы ссылаемся на два аргумента:
Второй аргумент, $ 2, будет выступать в качестве выходного файла для той же команды. Но вы также можете видеть, что это по-другому. Мы добавили период, и мы указали переменную, описанную выше, сверху. Любопытно, что это делает?
Вот что происходит при запуске скрипта:
Вы можете видеть, что выходной файл указан как все, что я ввел за $ 2, за которым следует период, а затем вывод команды даты! Имеет смысл, не так ли?
Теперь, когда я запустил команду datecp, она запустит этот скрипт и позволит мне скопировать любой файл в новое место и автоматически добавить дату и время до конца имени файла. Полезно для архивирования!
Shell scripting лежит в основе работы вашей ОС для вас. Вам не нужно изучать новый язык программирования, чтобы это произошло. Попробуйте написать несколько базовых команд дома и подумайте о том, для чего вы можете это использовать.
Вы сценарируете? Есть советы для новичков? Поделитесь своими мыслями в комментариях! В этой серии еще много!