Сценарий командной строки

Поделись знанием:
Перейти к: навигация, поиск

Сценарий кома́ндной стро́ки, или сценарий командной оболочки, (англ. shell script) — программа, выполняемая командной оболочкой операционной системы. Наиболее часто термин применяется к скриптам, написанным для Bourne shell — программной оболочки систем UNIX.[1]



В Unix

В Unix-подобных операционных системах нет требований к расширению имени файла, однако для скриптов командной оболочки выделено расширение .sh. Наиболее простые операции, выполняемые такими скриптами — вывод текста и базовые операции с файлами.

Для запуска скрипта необходимо ввести в эмулятор терминала с запущенным shell путь к файлу скрипта и аргументы (например, ./myscript.sh -switches—switch—file1 file2). Аргументы пишутся через пробел. Среди разработчиков скриптов существует соглашение давать пользователю возможность менять режим работы скрипта исключительно через аргументы, начинающиеся с дефиса: одинарный дефис для аргументов длиной в один символ (при этом после дефиса может быть указано сразу несколько ключей, например -abcd эквивалентно -a -b -c -d), или двойной дефис для аргументов длиной в два и более символов (например, --help, --switch-with-very-long-name). Двойной дефис, окружённый пробелами, указывает, что следующие за ним токены не являются аргументами.[2] Для упрощения следования этим соглашениям, во многие UNIX-подобные системы включена программа getopt, упрощающая разбор аргументов.[3] Также обычной практикой является вывод справки при передаче аргумента—help. Еще один способ получить справку (для стандартных скриптов) — воспользоваться утилитой man.

Пример скрипта, конвертирующего изображения формата .jpg в формат .png:

#!/bin/bash
for jpg; do                                  # использовать $jpg для каждого имени файла по очереди
    png="${jpg%.jpg}.png"                    # получить PNG-версию имени файла .jpg с .png
    echo converting "$jpg" ...               # сообщение для пользователя
    if convert "$jpg" jpg.to.png ; then      # использовать утилиту convert для создания временного PNG-файла
        mv jpg.to.png "$png"                 # если сработало, переименовать временный PNG-файл, дав требуемое имя
    else                                     # ...иначе напечатать сообщение об ошибке
        echo 'jpg2png: ошибка: результат сохранен в "jpg.to.png".' >&2
        exit 1
    fi                                       # конец "if"
done                                         # конец "for"
echo "Успешно преобразовано"                 # сообщение об успехе
exit 0

В Windows

В Windows скрипты командной строки существуют в виде пакетных файлов и записываются в файл с расширением .bat, .cmd или .btm. Компиляции или другой специальной обработки файла для его запуска не требуется: достаточно написать его код и сохранить текстовый файл как пакетный.

Напишите отзыв о статье "Сценарий командной строки"

Ссылки

  1. Kernighan, Brian W. & Pike, Rob (1984), "3. Using the Shell", The UNIX Programming Environment, Prentice Hall, Inc., с. 94, ISBN 0-13-937699-2 
  2. [www.grymoire.com/Unix/Sh.html#uh-95 UNIX conventions for command line arguments] (Bruce Barnett's Bourne Shell Grymoire)
  3. [www.grymoire.com/Unix/Sh.html#uh-96 Checking for optional arguments] (Bruce Barnett's Bourne Shell Grymoire)

Отрывок, характеризующий Сценарий командной строки

Ряды пехотных солдат скрылись в дыму, послышался их протяжный крик и частая стрельба ружей. Через несколько минут толпы раненых и носилок прошли оттуда. На батарею еще чаще стали попадать снаряды. Несколько человек лежали неубранные. Около пушек хлопотливее и оживленнее двигались солдаты. Никто уже не обращал внимания на Пьера. Раза два на него сердито крикнули за то, что он был на дороге. Старший офицер, с нахмуренным лицом, большими, быстрыми шагами переходил от одного орудия к другому. Молоденький офицерик, еще больше разрумянившись, еще старательнее командовал солдатами. Солдаты подавали заряды, поворачивались, заряжали и делали свое дело с напряженным щегольством. Они на ходу подпрыгивали, как на пружинах.
Грозовая туча надвинулась, и ярко во всех лицах горел тот огонь, за разгоранием которого следил Пьер. Он стоял подле старшего офицера. Молоденький офицерик подбежал, с рукой к киверу, к старшему.
– Имею честь доложить, господин полковник, зарядов имеется только восемь, прикажете ли продолжать огонь? – спросил он.
– Картечь! – не отвечая, крикнул старший офицер, смотревший через вал.
Вдруг что то случилось; офицерик ахнул и, свернувшись, сел на землю, как на лету подстреленная птица. Все сделалось странно, неясно и пасмурно в глазах Пьера.
Одно за другим свистели ядра и бились в бруствер, в солдат, в пушки. Пьер, прежде не слыхавший этих звуков, теперь только слышал одни эти звуки. Сбоку батареи, справа, с криком «ура» бежали солдаты не вперед, а назад, как показалось Пьеру.
Ядро ударило в самый край вала, перед которым стоял Пьер, ссыпало землю, и в глазах его мелькнул черный мячик, и в то же мгновенье шлепнуло во что то. Ополченцы, вошедшие было на батарею, побежали назад.
– Все картечью! – кричал офицер.
Унтер офицер подбежал к старшему офицеру и испуганным шепотом (как за обедом докладывает дворецкий хозяину, что нет больше требуемого вина) сказал, что зарядов больше не было.
– Разбойники, что делают! – закричал офицер, оборачиваясь к Пьеру. Лицо старшего офицера было красно и потно, нахмуренные глаза блестели. – Беги к резервам, приводи ящики! – крикнул он, сердито обходя взглядом Пьера и обращаясь к своему солдату.
– Я пойду, – сказал Пьер. Офицер, не отвечая ему, большими шагами пошел в другую сторону.
– Не стрелять… Выжидай! – кричал он.
Солдат, которому приказано было идти за зарядами, столкнулся с Пьером.
– Эх, барин, не место тебе тут, – сказал он и побежал вниз. Пьер побежал за солдатом, обходя то место, на котором сидел молоденький офицерик.
Одно, другое, третье ядро пролетало над ним, ударялось впереди, с боков, сзади. Пьер сбежал вниз. «Куда я?» – вдруг вспомнил он, уже подбегая к зеленым ящикам. Он остановился в нерешительности, идти ему назад или вперед. Вдруг страшный толчок откинул его назад, на землю. В то же мгновенье блеск большого огня осветил его, и в то же мгновенье раздался оглушающий, зазвеневший в ушах гром, треск и свист.