Параметры сценария это

В главе описана методика получения и обработки аргументов сценариев командной оболочки

Фундаментальные основы Linux. Часть VI. Сценарии

Оригинал:

Linux Fundamentals

Автор: Paul Cobbaut

Дата публикации: 16 октября 2014 г.

Перевод: А.Панин

Дата перевода: 21 декабря 2014 г.

Глава 23. Параметры сценариев

Параметры сценария

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

#!/bin/bash
echo Первым аргументом является $1
echo Вторым аргументом является $2
echo Третьим аргументом является $3

echo $ $$  - идентификатор процесса (PID) интерпретатора сценария
echo # $#  - количество аргументов
echo ? $?  - последний код завершения процесса
echo * $*  - строковое представление всех аргументов

Ниже представлен вывод данного сценария.

[paul@RHEL4a scripts]$ ./pars one two three
Первым аргументом является one
Вторым аргументом является two
Третьим аргументом является three
$ 5610 - идентификатор процесса (PID) интерпретатора сценария
# 3  - количество аргументов
? 0  - последний код завершения процесса
* one two three - строковое представление всех аргументов

Еще один вариант исполнения данного сценария, но теперь с передачей только двух параметров.

[paul@RHEL4a scripts]$ ./pars 1 2
Первым аргументом является 1
Вторым аргументом является 2
Третьим аргументом является
$ 5612 - идентификатор процесса (PID) интерпретатора сценария
# 2 - количество аргументов
? 0 - последний код завершения процесса
* 1 2 - строковое представление всех аргументов
[paul@RHEL4a scripts]$

А это другой пример сценария, в котором мы используем параметр $0. Параметр $0 содержит имя файла исполняющегося сценария.

paul@debian6~$ cat myname 
echo имя файла этого сценария $0
paul@debian6~$ ./myname 
имя файла этого сценария ./myname
paul@debian6~$ mv myname test42
paul@debian6~$ ./test42 
имя файла этого сценария ./test42

Обход списка параметров

Оператор обхода списка параметров (shift) позволяет произвести разбор всех переданных сценарию параметров по очереди. Ниже представлен пример сценария с данным оператором.

kahlan@solexp11$ cat shift.ksh 
#!/bin/ksh                                
                                          
if [ "$#" == "0" ] 
 then
  echo Вы должны передать по крайней мере один параметр сценарию.
  exit 1
fi

while (( $# ))
 do
  echo Вы передали сценарию параметр $1
  shift
 done

А это вариант вывода приведенного выше сценария.

kahlan@solexp11$ ./shift.ksh one  
Вы передали сценарию параметр one
kahlan@solexp11$ ./shift.ksh one two three 1201 "33 42"
Вы передали сценарию параметр one                           
Вы передали сценарию параметр two
Вы передали сценарию параметр three
Вы передали сценарию параметр 1201
Вы передали сценарию параметр 33 42
kahlan@solexp11$ ./shift.ksh
Вы должны передать по крайней мере один параметр сценарию.

Ввод в процессе исполнения сценария

Вы можете попросить пользователя ввести данные, воспользовавшись командой read в сценарии.

#!/bin/bash
echo -n Введите число:
read number

Задействование файла конфигурации

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

Ниже приведено содержимое демонстрационного файла конфигурации для приложения.

[paul@RHEL4a scripts]$ cat myApp.conf 
# Файл конфигурации для приложения myApp

# Путь 
myAppPath=/var/myApp

# Количество приложений, осуществляющих саморепликацию
quines=5

А это код приложения, которое использует данный файл.

[paul@RHEL4a scripts]$ cat myApp.bash 
#!/bin/bash
#
# Добро пожаловать в приложение myApp
# 

. ./myApp.conf

echo Количество самовоспроизводящихся приложений: $quines

В ходе исполнения приложение может использовать значения из подключенного файла конфигурации.

[paul@RHEL4a scripts]$ ./myApp.bash 
Количество самовоспроизводящихся приложений: 5
[paul@RHEL4a scripts]$

Получение параметров сценария с помощью функции getopts

Функция getopts позволяет осуществлять разбор параметров, передаваемых сценарию посредством командного интерфейса системы. Следующий сценарий позволяет использовать любую комбинацию параметров a, f и z.

kahlan@solexp11$ cat options.ksh 
#!/bin/ksh

while getopts ":afz" option;
do
 case $option in
  a)
   echo принят параметр -a
   ;;
  f)
   echo принят параметр -f
   ;;
  z)
   echo принят параметр -z
   ;;
  *)
   echo "некорректный параметр -$OPTARG" 
   ;;
 esac
done

Ниже представлен вариант вывода данного сценария. Сначала мы передаем исключительно допустимые параметры, а затем дважды передаем некорректный параметр.

kahlan@solexp11$ ./options.ksh        
kahlan@solexp11$ ./options.ksh -af
принят параметр -a
принят параметр -f
kahlan@solexp11$ ./options.ksh -zfg
принят параметр -z
принят параметр -f
некорректный параметр -g
kahlan@solexp11$ ./options.ksh -a -b -z
принят параметр -a
некорректный параметр -b
принят параметр -z

Также вы можете обрабатывать параметры, которые подразумевают использование аргумента таким образом, как показано в данном примере.

kahlan@solexp11$ cat argoptions.ksh 
#!/bin/ksh

while getopts ":af:z" option;
do
 case $option in
  a)
   echo принят параметр -a
   ;;
  f)
   echo принят параметр -f с аргументом $OPTARG
   ;;
  z)
   echo принят параметр -z
   ;;
  :)
   echo "вместе с параметром -$OPTARG должен быть передан аргумент"
   ;;
  *)
   echo "некорректный параметр -$OPTARG" 
   ;;
 esac
done

А это вариант вывода представленного выше сценария.

kahlan@solexp11$ ./argoptions.ksh -a -f hello -z
принят параметр -a
принят параметр -f с аргументом hello
принят параметр -z
kahlan@solexp11$ ./argoptions.ksh -zaf 42       
принят параметр -z
принят параметр -a
принят параметр -f с аргументом 42
kahlan@solexp11$ ./argoptions.ksh -zf   
принят параметр -z
вместе с параметром -f  должен быть передан аргумент

Получение параметров функционирования командной оболочки с помощью команды shopt

Вы можете изменять значения переменных, управляющих аспектами функционирования командной оболочки, с помощью встроенной команды командной оболочки shopt. В примере ниже сначала осуществляется проверка того, установлено ли значение переменной cdspell; оказывается, что оно не установлено. После этого с помощью команды shopt осуществляется установка значения данной переменной, а третья команда, в составе которой используется команда shopt, предназначается для проверки того, действительно ли была осуществлена установка значения рассматриваемой переменной. После установки значения данной переменной вы можете допускать незначительные опечатки в ходе использования команды cd. Страница руководства командной оболочки bash содержит полный список допустимых переменных.

paul@laika:~$ shopt -q cdspell ; echo $?
1
paul@laika:~$ shopt -s cdspell
paul@laika:~$ shopt -q cdspell ; echo $?
0
paul@laika:~$ cd /Etc
/etc

Практическое задание: параметры сценариев и специальные переменные

1. Разработайте сценарий, который будет принимать четыре параметра и выводить их в обратном порядке.

2. Разработайте сценарий, который будет принимать два параметра (два имени файла) и выводить информацию о том, существуют ли эти файлы.

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

4. Создайте конфигурационный файл для предыдущего сценария. Объявите в рамках данного конфигурационного файла логическую переменную, которая позволит управлять функцией журналирования, заключающейся в записи подробной информации обо всех выполняемых сценарием действиях в файл журнала, который расположен в директории /tmp.

Корректная процедура выполнения практического задания: параметры сценариев и специальные переменные

1. Разработайте сценарий, который будет принимать четыре параметра и выводить их в обратном порядке.

2. Разработайте сценарий, который будет принимать два параметра (два имени файла) и выводить информацию о том, существуют ли эти файлы.

#!/bin/bash

if [ -f $1 ]
then echo файл $1 существует!
else echo файл $1 не найден!
fi

if [ -f $2 ]
then echo файл $2 существует!
else echo файл $2 не найден!
fi

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

4. Создайте конфигурационный файл для предыдущего сценария. Объявите в рамках данного конфигурационного файла логическую переменную, которая позволит управлять функцией журналирования, заключающейся в записи подробной информации обо всех выполняемых сценарием действиях в файл журнала, который расположен в директории /tmp.


Если вам понравилась статья, поделитесь ею с друзьями:


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

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

Продемонстрируем вышесказанное на примере ранее настроенной кампании Datacol. Для создания параметров откроем сценарий для редактирования. Создадим новые параметры.

Заметим, что названия параметров могут быть произвольными.

Теперь осталось вставить параметры в сценарий. Выберем событие ввода логина.

Вместо исходного фиксированного значения вставим параметр.

Обратите внимание, для вставки параметра его имя окружается знаками доллара.

Аналогично задаем параметр для действия ввода пароля.

Все готово. Проверим работу нашего сценария.

Видим, что сценарий успешно выполняет поставленную задачу. Остается нажать кнопку Сохранить.

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

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

человек 1 гетопт:https://www.cnblogs.com/f-ck-need-u/p/9757959.html


При написании сценариев оболочки разработка параметров командной строки сценария с помощью while, case, shift является трудной задачей, поскольку параметры и параметры командной строки Unix обладают высокой степенью свободы и поддерживают короткие и длинные параметры. Необязательно, порядок опций может не иметь значения и так далее.

Команда getopt в bash может анализировать параметры и параметры командной строки,Преобразуйте случайные, бесплатные параметры и параметры командной строки, чтобы получить полный и стандартизированный список параметров, чтобы было намного проще использовать while, case и shift для обработки

Существуют разные версии getopt, в этой статье представлена ​​его расширенная версия (улучшенная) по сравнению с традиционным getopt (также становится совместимой версией getopt), она предоставляет возможность защиты цитат. Кроме того, в дополнение к различным версиям getopt, в bash также есть встроенные команды getopts (обратите внимание, что есть конечные символы), которые также используются для анализа параметров командной строки, но только коротких.

Чтобы проверить, является ли установленный getopt расширенной или традиционной версией, используйтеgetopt -TПросто суди. Если он ничего не выводит, это расширенная версия, а его код состояния выхода — 4. Если он выводит «-», это традиционная версия getopt, и его код состояния выхода в данный момент равен 0. Если вы хотите проверить версию в скрипте, вы можете обратиться к следующему коду:

getopt -T &>/dev/null;[ $? -ne 4 ] && { echo "not enhanced version";exit 1; }

1. Те ​​вещи с параметрами командной строки

Перед тем, как научиться использовать getopt, вы должны знать здравый смысл командной строки. Это может быть достигнуто с помощью Getopt, но некоторые могут быть более сложными для реализации.

1. Различают опцию, параметр, аргумент, опциональный аргумент и неопционный параметр

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

Например, при определении функцииfunction foo(x,y){CODE}Параметры x и y функции называются параметрами. При вызове функции и передаче параметров,foo(arg1,arg2)И arg1, и arg2 в функции зависят от нее, более уместно вызывать аргумент, но его также можно назвать более широким параметром.

В качестве другого примера, командная строка:

tar -zcf a.tar.gz /etc/pki

Если это грубо,-z-c-fa.tar.gz/etc/pkiМожно назвать параметром. Подразделенные слова:

  • «-z -c -f» называется option, то есть option
  • a.tar.gz это опция «-f»Параметры опции(Параметр, передаваемый в опцию), в зависимости от опции, вызываемый аргумент является более подходящим, более строгий термин является аргументом опции
  • / etc / pki не является ни параметром, ни параметром параметра, он называетсяНеобязательные параметры типа, Соответствующее имя не является параметром

Эта статья о getopt, поэтому рассматриваются только параметры командной строки.

2. Короткие и длинные варианты и их «невысказанные правила»

Большинство команд в Linux предоставляют короткие и длинные опции. Вообще говоря, короткие опции используют только один «-» в начале, только один символ используется в опционной части, а длинные опции начинаются с двух тире («-»).

Например, «-a» — это короткая опция, а «—append» — длинная.

Вообще говоря, порядок опций не имеет значения, но это не совсем так. Иногда некоторые опции должны быть помещены впереди, и должны быть размещены до и после определенных опций.

Вообще говоря, короткие варианты:

  • Вы можете соединить несколько коротких опций вместе с тире «-«, но если у коротких опций, соединенных вместе, есть параметры, они должны быть последним символом в ряду.

    Например, «-avz» будет фактически проанализирован как «-a -v -z»,tar -zcf a.tar.gzНесколько коротких опций объединяются, но опция «-f» имеет параметр a.tar.gz, поэтому он должен быть последним символом опции конкатенации.

  • Параметры короткой опции могут быть связаны с именем опции или разделены пробелом. Например-n 3и-n3Это эквивалентно, значение 3 является значением параметра «-n».
  • Если параметры короткой опции являются необязательными, ее параметры должны следовать сразу после имени опции и не могут быть разделены пробелами. Почему, смотрите пункт 3 ниже.

В общем, длинные варианты:

  • Вы можете использовать либо знак равенства, либо пустое соединение для предоставления параметров опции. Например--file=FILEили--file FILE
  • Если параметры длинной опции являются необязательными, то их параметры должны быть связаны с «=». Почему, смотрите пункт 3 ниже.
  • Длинные варианты, как правило, могут быть сокращены, если нет двусмысленности.

Например, команда ls имеет 3 длинных параметра, начинающихся с «a».

$ ls --help | grep -- '--a' 
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file

Если вы хотите указать--almost-all, Который может быть сокращен как--alm; Если вы хотите указать--author, Который может быть сокращен как--au, Если аббревиатура только «—a», bash выдаст сообщение об ошибке, длинная опция неоднозначна:

$ ls --a
ls: option '--a' is ambiguous; possibilities: '--all' '--author' '--almost-all'
Try 'ls --help' for more information.

3. Опции без параметров, опции с необязательными параметрами и опции с параметрами

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

Как упоминалось ранее, если параметр параметра является необязательным, его параметр не должен использовать пробелы для разделения параметра и параметра. Если разделены пробелами, невозможно определить, является ли следующий элемент параметром опции или параметром неопционного типа.

Например,-cи--configПараметр параметра является необязательным. Чтобы указать параметры для этих двух параметров, его необходимо записать в виде-cFILE--config=FILE, Если написано-c FILE--config FILE, Тогда getopt не может определить, является ли этот ФАЙЛ параметром, предоставленным для параметра типа или параметра без параметра.

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

4. Используйте «-» для отделения опций (и параметров их опций) от параметров не опционального типа

В командной строке unix вы всегда можете добавить «-» перед параметрами неопционного типа, что означает, что опции и параметры опций здесь, а последние являются параметрами неопционального типа.

Например:

seq -w -- 3
seq -w -- 1 3

Соответственно, укажите, что 3 и «1 3» являются параметрами типа seq, не являющимися опциями, а «-» перед ними должны быть параметрами или параметрами опций.

5. Начало тире в параметрах командной строки не всегда может быть коротким, но может быть и отрицательным параметром

Например, команда seq:

seq -w -5 -1 5

Среди них -5 и -1 являются отрицательными параметрами неопционального типа.

6. Варианты зависимостей и взаимное исключение

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

Например--manage --remove, Только при использовании--manageМожет использоваться только при условии--removeВ противном случае вы должны сообщить об ошибке.

7. Модульные (модульные) варианты типа

Многие команды Unix модульные опции. Например, команда ip, режим адреса, режим маршрута, режим связи и т. Д.

ip addr OPTIONS
ip route OPTIONS
ip link OPTIONS 
ip neigh OPTIONS

8. Опции для других функций

Некоторые команды также имеют более персонализированные параметры, такие как команда head,-n NUMОпции, которые можно указать как-3Также можно указать как-n 3или-n3

2. Рабочий механизм опций разбора getopt

Команда bash getopt часто используется внутри сценариев или функций оболочки для анализа параметров и параметров, передаваемых во время выполнения сценария или функции.

Далее в качестве примера используется командная строка для объяснения того, как getopt анализирует параметры, но то же самое используется для анализа параметров функции.

2.1 опции getopt

Ниже приведен наиболее часто используемый метод синтаксического анализа getopt (этой команды достаточно). Для более полного синтаксиса getopt смотрите man getopt.

getopt -o SHORT_OPTIONS -l LONG_OPTIONS -n "$0" -- "[email protected]"

Среди них:
-o SHORT_OPTIONS
--options SHORT_OPTIONS
getopt собирает короткие параметры, передаваемые в командной строке, и соответствующие им параметры через параметр -o. Смотрите следующий раздел для формата SHORT_OPTIONS.

-l LONG_OPTIONS
--longoptions LONG_OPTIONS
getopt собирает длинные параметры, передаваемые в командной строке, и соответствующие им параметры через параметр «-l». Вы можете часто видеть «—long» в сценариях других людей, что эквивалентно. Как объяснялось выше, длинные параметры могут быть сокращены, если они не вызывают двусмысленности. Смотрите следующий раздел для формата LONG_OPTIONS.

-n NAME
Когда getopt анализирует командную строку, если при синтаксическом анализе произошла ошибка (например, параметр, необходимый для параметра, не имеет параметра, используется параметр, который не может быть проанализирован и т. д.), появится сообщение об ошибке, и getopt будет использовать NAME В качестве имени скрипта ошибки.

-- "[email protected]"
где--Это означает, что параметры самой команды getopt закончились. Следующие элементы являются параметрами командной строки, которые должны быть проанализированы getopt. Используйте здесь"[email protected]", С указанием всех параметров командной строки. Обратите внимание, что двойные кавычки не могут быть опущены.

2.2 Как getopt анализирует параметры и параметры

Когда getopt использует «-o» или «-l» для анализа коротких и длинных опций и параметров, он выводит каждый проанализированный параметр и параметр, а затем помещает их в строку. Содержимое этой строки — полные стандартизированные параметры и параметры.

Когда getopt использует опцию «-o» для разбора коротких опций:

  • Несколько коротких опций могут быть связаны друг с другом
  • Если для анализа параметра требуется параметр, за двоеточием следует имя параметра
  • Если параметры анализируемой опции являются необязательными, за именем опции следует две двоеточия
  • Например,getopt -o ab:c::, Разрешу-a -b arg_b -c [arg_c], Arg_b требуется для опции -b, arg_c — необязательный параметр для опции -c, опция -a не требует параметров

Когда getopt использует опцию «-l» для разбора длинных опций:

  • Вы можете указать несколько имен опций одновременно, вам нужно использовать запятые для их разделения
  • Вы можете использовать опцию -l несколько раз для многократного разбора длинных опций
  • Если для анализа параметра требуется параметр, за двоеточием следует имя параметра
  • Если параметры анализируемой опции являются необязательными, за именем опции следует две двоеточия
  • Например,getopt -l add:,remove::,show, Разрешу--add arg_add --remove [arg_rem] --showГде arg_add--addОпция обязательна,--removeОпционный параметр arg_rem является необязательным,--showНет параметров

Если вы анализируете опцию с параметрами, строка, сгенерированная getopt, будет использовать значение параметра опции как следующий параметр опции. Если синтаксический анализ является опцией с необязательными параметрами, если для опции задан параметр, параметр будет помещен в следующую позицию параметра опции, и если для опции не задан параметр, будет создан пустой символ, окруженный кавычками Строка в качестве следующего параметра опции.

getoptПосле разбора параметров и параметров параметров, Будет разбирать неопционные параметры. Чтобы отличить параметры неопционального типа от опций и параметров опций, getopt добавит «-» к строке при разборе первого параметра неопционального типа, указывая, что опции и параметры опций завершены, а затем Все параметры неопционного типа помещаются после этого параметра «-«.

По умолчанию эта расширенная версия getopt будет окружать все значения параметров (включая параметры параметров и параметры типов, не относящиеся к параметрам) кавычками, чтобы защитить пробельные символы и специальные символы. Если это совместимая версия getopt, она не будет защищена кавычками, что приведет к нарушению анализа параметров.

Это легко понять, посмотрев на следующие примеры.

2.3 Пример анализа аналитического метода Гетотта

Например, в сценарии test.sh следующие результаты getopt сохраняются в переменных переменных, а затем выводится полный список параметров, полученный после завершения анализа getopt.

#!/usr/bin/env bash

parameters=`getopt -o ab:c:: --long add:,remove::,show -n "$0" -- "[email protected]"`
echo "$parameters"

Если вы еще этого не знаете-oи--longЧто было проанализировано, пожалуйста вернитесь и прочитайте это снова.

Выполните этот скрипт и передайте некоторые опции и параметры этому скрипту, эти параметры скрипта будут собраны[email protected]А потом разобрался с гетоптом.

$ ./test.sh -a non-op_arg1 -b b_short_arg non-op_arg2 --rem --add /path --show -c non-op_arg3
 -a -b 'b_short_arg' --remove '' --add '/path' --show -c '' -- 'non-op_arg1' 'non-op_arg2' 'non-op_arg3'

Во-первых, мы видим, что все параметры, переданные в сценарий, вышли из строя:

  • Длинные опции:
    • --rem: Это сокращенная форма —remove, ее параметры не являются обязательными, но параметры для нее не передаются
    • --add: И установите параметр / путь опции
    • --show: Нет параметров
  • Краткие варианты:
    • -a: Это опция без параметров, поэтому не-op_arg1 за ней является параметром неопционного типа
    • -b: Это опция, которая должна принимать параметры, поэтому b_short_arg является ее параметром
    • -c: Его параметры являются необязательными, и здесь параметры не предоставляются (объяснено ранее, если вы хотите предоставить параметры для необязательных опций параметра, параметры и имена опций должны быть соединены вместе для коротких опций)
  • Параметры необязательного типа:
    • non-op_arg1
    • non-op_arg2
    • non-op_arg3

Из вывода getopt мы можем увидеть:

  • Параметры первого разбора и параметры параметров
  • Параметры и параметры параметров анализируются слева направо
  • Параметры заключены в кавычки
  • Необязательные параметры для этих параметров, если для них не предоставлено никаких параметров, будет сгенерирован пустой строковый параметр, заключенный в кавычки
  • После анализа всех параметров и параметров параметров начните анализ параметров неопционного типа.
  • Перед параметрами типа, не являющегося параметром, генерируется строка «-«, которая отделяет параметры (и параметры параметра) от параметров типа, не являющегося параметром.

3. Обработка результатов анализа getopt

Анализ Getopt получил полный и стандартизированный результат, который, конечно, должен применяться. Например, передайте функцию напрямую или разделите параметры и параметры в соответствии с while, case, shift для сохранения отдельно.

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

Вообще говоря, весь поток обработки выглядит так:

parameters=$(getopt -o SHORT_OPTIONS -l LONG_OPTIONS -n "$0" -- "[email protected]")
[ $? != 0 ] && exit 1
 eval set - "$ parameters" # Установить $ параметры в качестве позиционных параметров
 в то время как истина; делать # цикл парсинга позиционных параметров
    case "$1" in
                 -a | --longa) ...; shift ;; # Параметр без параметров -a или --longa
                 -b | --longb) ...; shift 2 ;; # Опция с параметрами -b или --longb
                 -c | --longc) # необязательный параметр -c или --longc
            case "$2" in 
                                 "") ...; shift 2 ;; # нет дополнительных параметров
                                 *) ...; shift 2 ;; # приведены необязательные параметры
            esac;;
                 -) ...; break ;; # Начать анализ параметров неопционального типа, после разрыва все они сохраняются в $ @
        *) echo "wrong";exit 1;;
    esac
done

Следует отметить, что синтаксический анализ getopt может быть помещен в скрипт для анализа параметров командной строки, или он может быть помещен в функцию для анализа параметров функции.

4. Два режима сканирования getopt

Getopt предоставляет два режима сканирования, если вы добавляете знак плюс или минус перед краткой опцией getopt, вы можете указать два режима сканирования, а именно:getopt -o [+-]SHORT_OPTS

  • +Режим сканирования: до тех пор, пока параметры и параметры параметров анализируются, после анализа первого параметра типа, не являющегося параметром, он прекращает синтаксический анализ и обрабатывает все неразрешенное содержимое как параметры типа, не являющегося параметром. Таким образом, в этом случае параметры типа, не являющегося опцией, должны быть помещены в конце, а не перед определенной опцией, которую нужно проанализировать. Этот режим очень полезен при различении отрицательных чисел и коротких опций.
  • -Режим сканирования: он будет проанализирован в соответствии с параметрами исходного положения и сохранит исходное положение. Этот режим обычно бесполезен, потому что он подрывает преимущества getopt: делает опции полными и стандартизированными.

Например, для параметров командной строки-w -s -5 3 -2, Чтобы определить -5 как параметр -s и 3 и -2 как параметры неопционного типа, то:

$ set - w -s -5 3 -2 # Установить параметры позиции
$ getopt -o +s:w -n "$0" -- "[email protected]"
   -w -s '-5' - '3' '-2' # результат анализа

Обратите внимание, что вышеприведенное значение -5 анализируется в параметре -s, а не в параметре типа option или non-option, поскольку параметр -s должен указывать параметр.

3 выше не должно быть отрицательным, потому чтоgetopt должен сканировать до нормального неопционального параметра, прежде чем все отрицательные числа, стоящие за ним, могут рассматриваться как неопционные параметры, Что касается того, как-w -s -5 -3 -2И -3, и -2 в анализе анализируются как необязательные параметры, и я пока не знаю.

Использовать-Режим сканирования:

$ set -- 3 -w 4 -s -5 a 3
$ getopt -o -s:w -n "$0" -- "[email protected]"
 '3' -w '4' -s '-5' 'a' '3' - # Результат анализа

Как видите, все вышеперечисленные позиции параметров сохраняются как есть, и в конце добавляется разделитель «-».

5. Как реализовать различные функции личности параметров командной строки

ПередПараметры командной строкиНесколько вариантов с «личностью» вводятся в том числе:

  • Зависимость параметра: например, «-a» или «—add» зависит от параметра «-m» или «—manage»
  • Взаимоисключающие параметры: например, «-a» или «—add» и «-r» или «—remove» являются взаимоисключающими
  • Определите отрицательные параметры: например-w -5 -3 5Где -5 и -3 — это не короткие варианты, а отрицательные параметры
  • Варианты модализации: напримерscript_name MODE OPTIONSЧасть MODE может быть в режиме управления (—manage, -m), или вы можете использовать режим добавления (—add, -a)
  • Параметр параметра Альтернативные параметры: напримерhead -n 3Можно заменить наhead -3

Здесь мы представляем идею использования getopt для разбора параметров и их реализации.

После завершения анализа getopt предполагается, что возвращенный результат сохраняется в$parametersПеременный.

1. Вариант зависимости

Это на самом деле очень легко достичь, просто используйте grep для$parametersФильтруйте переменные.

Например, чтобы реализовать зависимости, просто:

{ echo "$parameters" | grep -E '--add|-a ' | grep -E '--manage|-m '; } &>/dev/null
[ $? -ne 0 ] && exit

2. Вариант взаимного исключения

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

or_op=`echo "$parameters" | grep -Eo '--add|-a | --remove|-r ' | wc -l`
[ "$or_op" = "2" ] && exit

3. Определите отрицательные параметры

Как объяснялось ранее, getopt предоставляет два режима сканирования, если вы используете+Режим сканирования позволяет легко различать отрицательные параметры и короткие параметры.

4. Варианты модализации

Как правило, шаблонные параметры являются первым параметром командной строки. Итак, просто$parameterПервый необязательный параметр типа после «-» извлекается, что является так называемым шаблоном. Конечно, вы должны сделать некоторые суждения об этом параметре, чтобы избежать его не является параметром режима.

Например, если вы хотите предоставить три режима: addr, show и route, тогда все значения параметров не опционального типа не должны быть параметрами режима.

eval set -- "$parameters"
while true ; do
    case "$1" in
            ...
        --) 
            shift
            [ "$x" = "addr" -o "$x" = "route" -o "$x" = "show" ] && MODE=$1
            shift
            break ;;
        *) echo "wrong";exit 1;;
    esac
done

5. Параметры параметров заменяют параметры

принимать-n3и-3Например, его общий формат-n NUMи-NUM, Это не легко достичь, метод, который я могу придумать, это использовать это-NUMНачать с[email protected]Отфильтруйте и присвойте значения.

NUM=`echo "[email protected]" | grep -Eo "-[0-9]+"`
ARGS=`echo "[email protected]" | sed -nr 's!(.*)-[0-9]+(.*)!12!'p`
eval set -- "$ARGS"

6. Используйте getopt для разработки примеров вариантов сценариев оболочки

Вот сценарий seq.sh, который выполняет ту же функцию, что и команда seq, а затем параметры дизайна для этого сценария.

Сначала посмотрите на описание каждой опции команды seq:

seq [OPTION] ... LAST # Синтаксис 1
 seq [ОПЦИЯ] ... ПЕРВАЯ ПОСЛЕДНЯЯ # Синтаксис 2
 seq [ОПЦИЯ] ... ПЕРВЫЙ ВКЛЮЧЕНО ПОСЛЕДНИЙ Синтаксис 3

 Варианты:
-s, --separator=STRING
 Используйте указанный STRING для разделения значений, значение по умолчанию " n" u

-w, --equal-width
 Используйте 0 префикса в префиксе, чтобы сделать все значения одинаковой длины

--help
 Показать справочную информацию и выйти

--version
 Вывести информацию о версии и выйти

Ниже приведено содержимое скрипта: по сравнению с seq есть только две проблемы: первое начальное значение FIRST не может быть отрицательным, десятичная функция не поддерживается. Другие функции идентичны

#!/usr/bin/env bash
###########################################################
 # автор: Golden Horse #
#  blog       : http://www.cnblogs.com/f-ck-need-u/       #
###########################################################

usage(){
cat <<'EOF'
Usage: $0 [OPTION]... LAST
  or:  $0 [OPTION]... FIRST LAST
  or:  $0 [OPTION]... FIRST INCREMENT LAST
EOF
}

 # Является ли версия getopt расширенной версией
getopt -T &>/dev/null;[ $? -ne 4 ] && { echo "not enhanced version";exit 1; }

 # Анализ параметров
parameters=`getopt -o +s:w --long separator:,equal-width,help,version -n "$0" -- "[email protected]"`
[ $? -ne 0 ] && { echo "Try '$0 --help' for more information."; exit 1; }

eval set -- "$parameters"

while true;do
    case "$1" in
        -w|--equal-width) ZERO_PAD="true"; shift ;;
        -s|--separator) SEPARATOR=$2; shift 2 ;;
        --version) echo "$0 version V1.0"; exit ;;
        --help) usage;exit ;;
        --)
            shift
            FIRST=$1
            INCREMENT=$2
            LAST=$3
            break ;;
        *) usage;exit 1;;
    esac
done


 # Используется для генерации порядкового номера
function seq_func(){

         # Вы хотите использовать printf для заполнения 0 бит?
    [ "x$1" = "xtrue" ] && zero_pad="true" && shift
    
         # Установите первый, шаг, последний
    if [ $# -eq 1 ];then
        first=1
        step=1
        last=$1
    elif [ $# -eq 2 ];then
        first=$1
        step=1
        last=$2
    elif [ $# -eq 3 ]; then
        first=$1
        step=$2
        last=$3
    else
        echo "$FUNCNAME: ARGS wrong..."
        exit 1
    fi
    
         # Последний выводимый элемент и его длина определяют, сколько нулей нужно заполнить
    last_output=$[ last - ( last-first ) % step ]
    zero_pad_len=`[ ${#last_output} -gt ${#first} ] && echo ${#last_output} || echo ${#first}`

         # Создать порядковый номер
    if [ "x$zero_pad" = "xtrue" ];then
                 # Заполнение 0
        if [ $step -gt 0 ];then
                         # Инкремент, заполните 0
            for((i=$first;i<=$last;i+=$step)){
                [ $last_output -eq $i ] && { printf "%0${zero_pad_len}in" "$i";return; }
                printf "%0${zero_pad_len}i " $i
            }
        else
                         # Уменьшить, заполнить 0
            for((i=$first;i>=$last;i+=$step)){
                [ $last_output -eq $i ] && { printf "%0${zero_pad_len}in" "$i";return; }
                printf "%0${zero_pad_len}i " $i
            }
        fi
    else
                 # Не заполняйте 0
        if [ $step -gt 0 ];then
                         # Инкремент, не заполняйте 0
            for((i=$first;i<=$last;i+=$step)){
                [ $last_output -eq $i ] && { printf "%in" "$i";return; }
                printf "%i " $i
            }
        else
                         # Уменьшить без заполнения 0
            for((i=$first;i>=$last;i+=$step)){
                [ $last_output -eq $i ] && { printf "%in" "$i";return; }
                printf "%i " $i
            }
        fi
    fi
}

 # Укажите выходной разделитель
: ${SEPARATOR="n"}

 # Выходной результат
seq_func $ZERO_PAD $SEPARATOR $FIRST $INCREMENT $LAST | tr " " "$SEPARATOR"

Дефект сценария вышеупомянутой опции синтаксического анализа состоит в том, что FIRST не может быть проанализирован, например./seq.sh -w -5 3Сообщит об ошибке. Но можно написать как стандарт./seq.sh -w -- -5 -3Синтаксис.

Пожалуйста, укажите источник для перепечатки:https://www.cnblogs.com/f-ck-need-u/p/9758075.html

Последовательное выполнение команд

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

В простейшем случае можно считать, что сценарий — это последовательность команд системы. Такую последовательность можно выполнить и без написания сценария, достаточно написать их в командной строке, разделяя точкой с запятой:

$date ; ls
Thu Nov 13 22:06:12 MSK 2008
calc data2.dat program.c
data.dat exams.tex text.txt

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

#!/bin/bash
#Call two commands
date
ls

В первой строке сценария указывается интерпретатор сценария. В нашем случае это Bourne Again Shell (bash). Строки, начинающиеся с #, являются комментариями. Третья и четвертая строки — собственно последовательность исполняемых команд. Предположим, что сценарий сохранен в файле script.sh. Чтобы этот сценарий можно было бы запустить, ему нужно дать права на выполнение:

$chmod a+x script1.sh
$./script1.sh
Thu Nov 13 22:11:02 MSK 2008
calc data2.dat program.c text.txt
data.dat exams.tex script1.sh
$

Обратите внимание на команду запуска сценария. В этом примере он запускается из каталога, в котором находится, поэтому явно прописывается ссылка на текущий каталог. Если в командной строке написать только имя сценария, то командный интерпретатор будет искать его в каталогах, указанных в переменной окружения PATH.

Иногда в сценариях требуется вывести какой-нибудь текст. Для этого можно использовать команду echo:

$echo This is a test
This is a test
$

Если текст содержит специальные символы, то текст нужно заключать в кавычки, причем неважно, одинарные или двойные:

$echo "This is a test to see if you.re paying attention"
This is a test to see if you.re paying attention
$echo 'Rich says "scripting is easy".'
Rich says "scripting is easy".
$

Эту же команду можно добавить в сценарий для вывода дополнительной информации:

#!/bin/bash
#Call two commands
echo The time and date are:
date
echo And these are files in current directory:
ls

Результат работы этого сценария будет следующим:

$./script1.sh
The time and date are:
Thu Nov 13 22:23:05 MSK 2008
And these are files in current directory:
calc data2.dat program.c text.txt
data.dat exams.tex script1.sh
$

Команда echo по умолчанию после вывода строки переходит на новую строку. Ключ -n позволяет изменить это поведение. Первый ее вызов можно исправить так:

echo -n "The time and date are: "

Тогда в результате работы сценария будет выведено следующее:

$./script1.sh
The time and date are: Thu Nov 13 23:06:30 MSK 2008
And these are files in current directory:
calc data2.dat program.c text.txt
data.dat exams.tex script1.sh
$

Использование переменных

В сценариях можно использовать два вида переменных: переменные окружения и переменные, определенные пользователем. Узнать значения всех переменные окружения можно, выполнив команду env:

$ env
BACKSPACE=Delete
BASH=/bin/bash
EUID=1000
HOME=/home/bravit
HOSTNAME=edu
HOSTTYPE=i586
LANG=en
LANGUAGE=en US:en
LINES=24
LOGNAME=bravit
...

Внутри сценария получить значения этих переменных можно, поставив перед их именем знак $:

#!/bin/bash
#Using variables
echo "Home directory: $HOME"
$./script2.sh
Home directory: /home/bravit
$

Обратите, что здесь обращение к переменной происходит внутри строки, тем не менее, ее значение подставляется правильно. Если знак $ нужно вывести на консоль, его нужно предварить обратным слешем:

$ echo "The cost of the item is $15"
The cost of the item is $15

Значения пользовательских переменных присваиваются непосредственно в тексте сценария:

#!/bin/bash
# testing variables
days=10
guest="Katie"
echo "$guest checked in $days days ago"
days=5
guest="Jessica"
echo "$guest checked in $days days ago"

Результат выполнения:

$./script3.sh
Katie checked in 10 days ago
Jessica checked in 5 days ago
$

Обратите внимание на то, что знак = должен быть написан без пробелов слева и справа. В противном случае первое слово будет восприниматься как команда.

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

var2=$var1

Знак $ здесь появляется только в правой части, поскольку именно там происходит чтения значения переменной var1.

Переменной можно присвоить результат вывода любой команды. Делается это с помощью оператора «обратные кавычки»:

$cat script4.sh
#!/bin/bash
# testing variables
current_time=`date`
echo "Current time is $current_time"
$./script4.sh
Current time is Thu Nov 13 23:43:00 MSK 2008
$

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

#!/bin/bash
# Using backtick
today=`date +%y%m%d`
ls > log.$today

После выполнения такого сценария в текущем каталоге появится файл, имя которого будет похоже на «log.081113«. Команда date с ключом +%y%m%d выводит две цифры номера года, две цифры номера месяца и две цифры дня:

$date +%y%m%d
081113 

Чтение параметров командной строки

Параметры, необходимые для работы сценария, удобно задавать при его запуске в командной строке. Доступ к этим параметрам внутри сценария выполняется с помощью специальных переменных с именами $1 (первый параметр), $2 (второй параметр) и т.д. Переменная с именем $# содержит общее количество заданных параметров, а переменная $0 — имя сценария. Предположим, к примеру, что сценарий (params.sh) имеет следующий вид:

#!/bin/sh
echo "Сценарий: $0"
echo "Всего параметров: $#"
echo "Первый параметр: $1"
echo "Второй параметр: $2"

Тогда при его запуске с указанием двух параметров получим следующий результат:

$ ./params.sh first second
Сценарий: ./params.sh
Всего параметров: 2
Первый параметр: first
Второй параметр: second

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

$ ./params.sh "first second"
Сценарий: ./params.sh
Всего параметров: 1
Первый параметр: first second
Второй параметр:

Арифметические вычисления

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

#!/bin/bash
var1=100
var2=50
var3=45
var4=$(( $var1 * ($var2 - $var3) ))
echo The final result is $var4

В результате выполнения получаем:

$./script6.sh
The final result is 500
$

К сожалению, для вещественной арифметики этот способ не подходит. При необходимости проведения в сценариях вычислений с вещественными числами, нужно пользоваться командой bc.

Ранее для целочисленной арифметики в bash использовался синтаксис с квадратными скобками (они применялись вместо двойных круглых). Однако сейчас он признан устаревшим и планируется к исключению.

Условные операторы и циклы

Условный оператор

В простейшей форме условный оператор выглядит так:

if command
then
 commands
fi

В отличие от традиционных языков программирования после слова if здесь пишется не условие, а команда, причем анализируется код завершения этой команды. Если код завершения равен нулю, то содержимое условного оператора выполняется, а если не равен, то не выполняется.

Сравните два примера:

$cat test1
#!/bin/bash
if date
then
 echo It works!
fi
$./test1
Fri Nov 14 09:56:48 MSK 2008
It works!
$

Здесь команда date выполняется успешно и возвращает нулевое значение, поэтому выполняется и действие внутри условного оператора.

$cat test1a
#!/bin/bash
if unexisted_command
then
 echo It works!
fi
echo if is over!
$./test1a
./test1a: line 2: unexisted_command: command not found
if is over!
$

А в этом примере тело условного оператора не выполнилось.

Некоторые команды возвращают ненулевое значение при неудачном выполнении. Например, команда grep, которая ищет строки в файлах по заданному критерию, возвращает ненулевое значение, если ни одной строки не найдено. Таким образом можно в зависимости от наличия строки в файле выполнять или не выполнять некоторые действия.

$cat test2
#!/bin/bash
# testing multiple commands in the then section
testuser=bravit
if grep $testuser /etc/passwd
then
 echo The bash files for user $testuser are:
 ls -a /home/$testuser/.b*
fi
$./test2
bravit:*:1001:0:Vitaly Bragilevsky:/home/bravit:/bin/csh
The bash files for user bravit are:
/home/bravit/.bash_history /home/bravit/.bashrc
$

Если переменной testuser присвоить имя несуществующего пользователя, то выведено ничего не будет:

$cat test2
#!/bin/bash
# testing multiple commands in the then section
testuser=unexisted
if grep $testuser /etc/passwd
then
 echo The bash files for user $testuser are:
 ls -a /home/$testuser/.b*
fi
$./test2
$

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

if command
then
 commands
else
 commands
fi

Исправленный сценарий и результат его выполнения будут выглядеть так:

$cat test2
#!/bin/bash
# testing multiple commands in the then section
testuser=unexisted
if grep $testuser /etc/passwd
then
 echo The bash files for user $testuser are:
 ls -a /home/$testuser/.b*
else
 echo "User $testuser is not registered"
fi
$./test2
User unexisted is not registered
$

Условные операторы можно вкладывать один в другой, проверяя различные условия:

if command1
then
 command set 1
elif command2
then
 command set 2
elif command3
then
 command set 3
elif command4
then
 command set 4
else
 commands
fi

Ветка else может отсутствовать.

Проверка условий

Есть еще один вариант синтаксиса условного оператора с возможностью проверки условий.

if [ condition ]
then
 commands
fi

Обратите внимание на пробелы до и после условия condition, при их отсутствии сценарий не будет правильно интерпретироваться.

Выделяют три вида условий, которые можно проверять в квадратных скобках:

  • числовые (только для целых чисел);
  • строковые (сравнение строк);
  • файловые (существование, права доступа и пр.).

Рассмотрим пример со сравнением чисел:

$ cat test5
#!/bin/bash
# using numeric test comparisons
val1=10
val2=11
if [ $val1 -gt 5 ]
then
 echo "The test value $val1 is greater than 5"
fi
if [ $val1 -eq $val2 ]
then
 echo "The values are equal"
else
 echo "The values are different"
fi

Операторы сравнения обозначаются здесь -gt и -eq. Первый означает «больше», а второй «равно». В следующей таблице приведены все операторы сравнения целых чисел.

Операция Описание
n1 -eq n2 n1 равно n2 (equal)
n1 -ge n2 n1 больше или равно n2 (greater or equal)
n1 -gt n2 n1 больше n2 (greater than)
n1 -le n2 n1 меньше или равно n2 (less or equal)
n1 -lt n2 n1 меньше n2 (less than)
n1 -ne n2 n1 не равно n2 (not equal)

При сравнении строк операторы выглядят более традиционно:

$ cat test5
#!/bin/bash
# using string test comparisons
# testing string equality
testuser=rich
if [ $USER = $testuser ]
then
 echo "Welcome $testuser"
fi
$ ./test7
Welcome rich
$

Все операторы сравнения строк перечислены в таблице:

Операция Описание
str1 = str2 Строки равны
str1 != str2 Строки не равны
str1 < str2 Строкаstr1 меньше
строки str2
str1 > str2 Строка str1 больше строки str2
-n str1 Строка str1 имеет ненулевую длину
-z str1 Строка str1 имеет нулевую длину

Оператор > необходимо экранировать обратным слешем, иначе он будет считаться символом перенаправления ввода-вывода:

$ cat test9
#!/bin/bash
# using string comparisons
val1=baseball
val2=hockey
if [ $val1 > $val2 ]
then
 echo "$val1 is greater than $val2"
else
 echo "$val1 is less than $val2"
fi
$./test9
baseball is less than hockey
$

В сравнении строк используется лексикографический порядок с учетом регистра символов.

Самой полезной при программировании сценариев является возможность проверки различных условий для файлов. В следующей таблице перечислены соответствующие операторы:

Операция Описание
-d file Файл с именем file является каталогом
-e file Файл существует
-f file Файл существует и является регулярным файлом
-r file Файл существует, и у сценария есть права на его чтение
-s file Файл существует и не пуст.
-w file Файл существует, и у сценария есть права на его запись
-x file Файл существует и является исполняемым
-O file Файл существует и принадлежит текущему пользователю
-G file Файл существует и его группа совпадает с группой пользователя
file1 -nt file2 file1 новее, чем file2
file1 -ot file2 file1 старее, чем file2

В следующем сценарии проверяется существование и возможность чтения файла паролей:

$cat test6
#!/bin/bash
# testing if you can read a file
pwfile=/etc/shadow
# first, test if the file exists, and is a file
if [ -f $pwfile ]
then
 # now test if you can read it
 if [ -r $pwfile ]
 then
 tail $pwfile
 else
 echo "Sorry, I’m unable to read the $pwfile file"
 fi
else
 echo "Sorry, the file $file doesn’t exist"
fi
$./test6
Sorry, I’m unable to read the /etc/shadow file
$

В еще одном примере проверяется, можно ли запустить файл, и он запускается:

$cat test7
#!/bin/bash
# testing file execution
if [ -x test6 ]
then
 echo "You can run the script:"
 ./test6
else
 echo "Sorry, you are unable to execute the script"
fi

Условия можно объединять с помощью логических операций:

    
    [ condition1 ] && [ condition2 ]
    [ condition1 ] || [ condition2 ]

Например:

$cat test8
#!/bin/bash
# testing compound comparisons
if [ -d $HOME ] && [ -w $HOME/testing ]
then
 echo "The file exists and you can write to it"
else
 echo "I can’t write to the file"
fi
$ ./test8
I can’t write to the file
$ touch $HOME/testing
$./test8
The file exists and you can write to it
$

Команда case

Оператор case используется для выбора одного из нескольких вариантов:

case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac

Каждый вариант заканчивается закрывающей скобкой, вертикальная черта означает «или», конец набора команд для одного варианта заканчивается двумя точками с запятой.

$ cat test9
#!/bin/bash
# using the case command
case $USER in
rich | barbara)
 echo "Welcome, $USER"
 echo "Please enjoy your visit";;
testing)
 echo "Special testing account";;
jessica)
 echo "Don’t forget to log off when you’re done";;
*)
 echo "Sorry, you’re not allowed here";;
esac
$ ./test9
Welcome, rich
Please enjoy your visit
$

Действия, аналогичные оператору case, можно выполнить и средствами условного оператора, однако считается, что синтаксис case является более наглядным.

Цикл for

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

Общий вид цикла for для языка сценариев bash выглядит так:

for var in list
do
 commands
done

Параметром list задается набор перебираемых данных. На каждом шаге цикла переменная var принимает значение одного из элементов списка, и для каждого такого значения выполняются команды, написанные между do и done. Рассмотрим разные способы задания набора перебираемых данных.

  1. Самый простой способ задания списка — непосредственное перечисление его элементов.
            $cat test1
            #!/bin/bash
            for student in Ivanov Petrov Sidorov
            do
             echo "Student is $student"
            done
            $./test1
            Student is Ivanov
            Student is Petrov
            Student is Sidorov
            $
    

    Если отдельные элементы списка содержат пробелы, их нужно записывать с помощью кавычек.

            $cat test1b
            #!/bin/bash
            for student in "Ivanov I.I." "Petrov P.P." "Sidorov S.S."
            do
             echo "Student is $student"
            done
            $./test1b
            Student is Ivanov I.I.
            Student is Petrov P.P.
            Student is Sidorov S.S.
            $
    

    Обратите внимание, что после завершения цикла переменная student остается доступной, ее значение совпадает с последним элементом списка.

  2. Список переменных может задаваться переменной.

            $cat test2
            #!/bin/bash
            students="Ivanov Petrov Sidorov"
            students=$students" Kozlov"
            
            for student in $students
            do
             echo "Student is $student"
            done
            $./test2
            Student is Ivanov
            Student is Petrov
            Student is Sidorov
            Student is Kozlov
            $
    

    Заметьте, каким образом здесь проведено сцепление (конкатенация) строк.

  3. Список переменных может являться результатом выполнения команды. Предположим, что в текущем каталоге есть файл names:

            $cat names
            Ivanov
            Petrov
            Sidorov
            $
    

    В следующем сценарии все строки этого файла перебираются в цикле:

            $cat test3
            #!/bin/bash
            file=names
            for student in `cat $file`
            do
             echo "Student is $student"
            done
            $./test3
            Student is Ivanov
            Student is Petrov
            Student is Sidorov
            $
    

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

            $cat names2
            Ivanov I.I.
            Petrov P.P.
            Sidorov S.S.
            $
    

    Следующий сценарий устанавливает в качестве разделителя только перевод строки:

            $cat test4
            #!/bin/bash
            IFS=$'n'
            file=names2
            for student in `cat $file`
            do
             echo "Student is $student"
            done
            $./test4
            Student is Ivanov I.I.
            Student is Petrov P.P.
            Student is Sidorov S.S.
            $
    

    Можно также установить сразу несколько разделителей:

            IFS=$'n':;"
    
  4. Наконец, список значений может быть результатом использования шаблонных символов в именах файлов.

            $cat test5
            #!/bin/bash
            for file in /etc/*
            do
             echo "File is $file"
            done
            $./test5
            File is /etc/X11
            File is /etc/aliases
            File is /etc/amd.map
            File is /etc/apmd.conf
            File is /etc/auth.conf
            File is /etc/bluetooth
            File is /etc/crontab
            ...
    

    В списке может указываться сразу несколько имен:

            for file in /dir1/* /dir2/* /dir3/*
            do
             echo "File is $file"
            done 
    

Циклы while и until

В простейшем варианте цикл while выглядит так:

while [ condition ]
do
 other commands
done

Например,

$ cat test6
#!/bin/bash
# while command test
var1=10
while [ $var1 -gt 0 ]
do
 echo $var1
 var1=$(( $var1 - 1 ))
done
$ ./test6
10
9
8
7
6
5
4
3
2
1
$

Команда until имеет следующий вид:

until [ condition ]
do
 commands
done

Например,

$ cat test12
#!/bin/bash
# using the until command
var1=100
until [ $var1 -eq 0 ]
do
 echo $var1
 var1=$(( $var1 - 25 ))
done
$ ./test12
100
75
50
25

Смысл проверяемого командой until условия следующий: цикл выполняется, пока условие не станет истинным.

Об основных стандартах оформления
сценария

Сокращения, которые используются в
оригинальном форматировании сценария:
ИНТ- интерьер (сцена в помещении) ; НАТ
— натура (сцена под открытым небом); КРП
— крупный план; ЗТМ — затемнение; из
ЗТМ — из затемнения; ВПЗ — Вне Поля
Зрения; ТЗ – Точка Зрения (сцена глазами
одного из персонажей); ПАН — Панорама
(Движение камеры на 180 градусов)

Сценарий в doc-файле, должен быть
отформатирован по правилам форматирования,
принятом во всем мире (Голливудский
стандарт) — об этом статья «Формат
сценария»

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

Текст сценария идет сразу же после
титульной страницы.

Первая страница — титульный лист

Тутульная страница не нумеруется. Имеет
поля страницы общие с остальными
страницами сценария: Верхнее – 2,5 см,
Нижнее – 1,25 см, Левое – 3,75 см, Правое –
2,5 см.

Указывается НАЗВАНИЕ СЦЕНАРИЯ(пишется
заглавными буквами). Расположение: 14
строка сверху.Параметры «Абзац»: слева
– 3,25 см, справа – 3,25 см, выравнивание:
по центру.

Автор сценария: псевдоним либо подлинное
имя автора (обычными буквами). От названия
сценария отделяется одной пустой
строкой. Поля и выравнивание аналогичные.

Источник экранизации / оригинальный
сценарий

(обычными буквами); отделяется от имени
автора одной пустой строкой. «Абзац»:
слева – 3,25 см, справа – 3,25 см, выравнивание:
по центру

В левом нижнем углу допускается дать
информацию о защите авторских прав и
эл.адрес, по которому можно связаться
с автором. Контактная информация пишется
обычными буквами; располагается: 39
строка сверху. Параметр «Абзац»: слева
– 8,25 см, выравнивание по левому краю.
При наличии агента указывайте не свои,
а его контактные адреса.

Шаблон разметки

В программе Word установите шаблон
разметки, далее пользуйтесь для вставки
блоков кнопкой «Формат по образцу»

Формат сценария

Можно использовать также программу
Писарь — она облегчает работу по
форматированию сценария. Шрифт: Courier
New ; Размер шрифта: 12; Выравнивание: по
левому краю ; Поля страницы: Верхнее –
2,5 см, Нижнее – 1,25 см, Левое – 3,75 см,
Правое – 2,5 см.

В меню «Вставка» выберите пункт «Номера
страниц» — «Вверху страницы», «Справа»
.

Блоки сценария

Блок «ВРЕМЯ И МЕСТО ДЕЙСТВИЯ»: 3,75 см от
левого края страницы, 2,5 см от правого
края страницы. Блок всегда из трех
составляющих: Вид места, Название места,
Время действия. Количество пробелов
между этими тремя составляющими
произвольное (по вашему выбору).

Вид места обозначается сокращениями
ИНТ. или НАТ., а время может обозначаться
только словами — УТРО, ДЕНЬ, ВЕЧЕР, НОЧЬ.
Между описанием названия места и
описанием времени действия можно ставить
пробел или тире. Пример.

НАТ. УЛИЦА — ДЕНЬ

Блок «Описание действия»: 3,75 см от левого
края страницы, 2,5 см от правого края
страницы. Блок «Описание действия»
всегда предшествует блоку «ИМЯ ГЕРОЯ»:
персонаж должен быть представлен зрителю
прежде, чем он произнесет свою первую
реплику. Описание действия не допустимо
в ремарке. Если герой произносит реплики
во время действия, то необходимо поставить
ремарку (продолжая).

Блок «ИМЯ ГЕРОЯ»: Слева – 6,75 см (3,75 см +
6,75 см = 10,5 см) «ИМЯ ГЕРОЯ» — всегда пишется
ЗАГЛАВНЫМИ БУКВАМИ. Блок «ИМЯ ГЕРОЯ» в
конце страницы не пишется. На протяжении
сценария герой должен именоваться
одним и тем же именем: имя героя не может
меняться, его реплики должны даваться
только под блоком ИМЯ ГЕРОЯ. Имена
второстепенных героев, которые идут
вторым планом или появляются в эпизодах,
обычно обозначаются словами: «МАМА
ГЕРОЯ», «ДРУГ ГЕРОЯ», «ДЕВУШКА», «СТАРИК»
и т.п.

В конце страницы блок не пишется.

Блок «Реплика героя»: Слева – 3,75 см
(3,75 см + 3,75 см=7,5см), Справа – 3,75 см (3,75 см
+ 2,5 см=6,25см) . Блок содержит слова, которые
произносит персонаж. Не допустимо в
данном блоке выделять имена героев
заглавными буквами. В тело блока можно
вставлять отдельной строкой ремарку,
не отделяя ее пустой строкой. После
блока «Реплика героя» может идти блок
«ИМЯ ГЕРОЯ» (блоки отделяются пустой
строкой). Если «Реплика героя» не
вместилась на странице, то в конце
страницы нужно написать слово (ДАЛЬШЕ),
а на следующей странице снова написать
ИМЯ ГЕРОЯ, а в скобках (ПРОД.) — продолжение.

После чего дописать реплику героя, не
разрывая предложения и дописав, как
минимум, два предложения диалога. Иной
вариант написания, перенести реплику
героя целиком на следующую страницу
или разбить на абзацы с добавлением
описания действия. И помните, кино —
это искусство коротких реплик. Через
реплики нужно выразить характер героя,
либо мысль сюжетной линии.

Блок «(ремарка)»: Слева – 5,5 см (5,5 см +
3,75 см=9,25 см), Справа – 4,5 см (4,5 см + 2,5
см=7см). Обязательно пишется в скобках
и маленькими буквами. Может разъяснять
к кому относится реплика или как
произносится реплика. Блок (ремарка)
переносится на следующую страницу по
правилам блока ИМЯ ГЕРОЯ.

Блок « ТИТР:»Блок выравнивается по
левому краю. В блоке идет та надпись,
которая должна быть на экране. Надпись
начинается с заглавной буквы, форматируется
как ремарка, но без скобок. После блока
«Титр:» может после пустой строки идти
блок ИМЯ ГЕРОЯ или блок Описание действия,
а также блок ВРЕМЯ И МЕСТО ДЕЙСТВИЯ.

Блоки отделяются друг от друга пустой
строкой.

Пустые строки между блоками создаются
нажатием клавиши ENTER (способ «один
пробел»). Несколько табуляций подряд
Не допускается.

Категорически запрещается разбивать
предложения на части и расставлять
переносы в словах.

Не отделяются друг от друга блоки «ИМЯ
ГЕРОЯ»-»Реплика героя». Между блоком
«ИМЯ ГЕРОЯ» и «Реплика героя» может
стоять блок «(ремарка)». Пустой строкой
Не отделяется!

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

Флэшбаки — воспоминания. Пример
оформления:

ИНТ. ЗДАНИЕ СУДА – ДЕНЬ, ВОСПОМИНАНИЕ

Келли стоит на ступеньках и говорит в
камеру.

КЕЛЛИ

…умер около сорока минут назад в
Хопкинской Центральной больнице.

КОНЕЦ ВОСПОМИНАНИЯ

Если героя не видно, но слышен его голос,
то после ГОЛОС ГЕРОЯ пишем (за кадром).
Пример.

ГОЛОС С ТЕХАСКИМ АКЦЕНТОМ (ВПЗ)

Придержи коней!

Если герой произносит фразу на иностранном
языке, достаточно указать на каком языке
говорит герой, а саму фразу воспроизводить
на русском языке. Или можно кусок диалога
сопроводить ПРИМЕЧАНИЕМ. Пример.

ПРМЕЧАНИЕ: РЕПЛИКИ В ДАННОЙ СЦЕНЕ
ПРОИЗНОСЯТСЯ НА ИСПАНСКОМ ЯЗЫКЕ С
РУССКИМИ СУБТИТРАМИ.

и обязательно отметить конец данной
сцены. Пример.

КОНЕЦ СУБТИТРОВ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Как оформить сценарий в ворде

Внимание опасность: Медузы! Первая помощь! (ч.2)
Данные второй части также основаны на официальной памятке Департамента морских и прибрежных ресурсов Таиланда.

ФОРМАТ РАЗМЕТКИ СЦЕНАРИЯ

Во времена отсутствия компьютеров все сценарии набивались на пишущей машинке, но даже тогда существовал стандарт форматирования сценария. Правда говорил он не о точных размерах (ибо какая точность может быть на пишущей машинке?), а о «приблизительных»: «приблизительно 3,5 дюйма от левого края страницы», «приблизительно 1,5 дюйма от верхнего края страницы» и т.п.

Сейчас практически у всех есть чудо техники – компьютер — с программой MS Word, поэтому не надо на глазок высчитывать «приблизительно 3,5 дюйма от края». Все просто до безобразия. В связи с чем, убедительная просьба – воспользуйтесь инструкцией, приведенной ниже. Не изобретайте велосипеда, то бишь собственных форматов разметки сценария. Работайте профессионально с самого начала.

Краткая инструкция по форматированию

1. Шрифт: Courier New

2. Размер шрифта: 12

3. Выравнивание: по левому краю

4. Жирный шрифт, шрифт курсивом и шрифт с подчеркиванием НИКОГДА не используются (даже если это ремарка, даже если это чтобы выделить какую-то важную мелочь, даже если это просто ну очень-очень хочется — все равно НИКОГДА)!

5. Поля страницы: Верхнее — 2,5 см, Нижнее — 1,25 см, Левое — 3,75 см, Правое — 2,5 см. Остальное без изменений.

6. Параметр «Абзац» блока «Имя героя»: Слева — 6,75 см, Остальное без изменений.

7. Параметр «Абзац» блока «Реплика героя»: Слева — 3,75 см, Справа — 3,75 см, Остальное без изменений.

8. Параметр «Абзац» блока «Ремарка»: Слева — 5,5 см, Справа — 4,5 см, Остальное без изменений.

Программа «ПИСАРЬ»

Для автоматизации процесса форматирования сценариев разработан программный модуль «ПИСАРЬ», который представляет собой plug-in к программе Microsoft Word.

Данный программный модуль автоматизирует только процесс ФОРМАТИРОВАНИЯ сценария, упрощает процесс разметки текста. Для переработки литературного произведения в сценарий этого НЕДОСТАТОЧНО! Перед использованием модуля ОБЯЗАТЕЛЬНО прочитайте статью «Формат разметки сценария».

Десять заповедей для тех, кто присылает свой сценарий на конкурс

1. Сценарий должен быть прислан в doc-файле, должен быть отформатирован согласно правилам форматирования, приведенным в статье «Формат разметки сценария», должен иметь титульный лист.

2. Для всех сценариев, пришедших на конкурс, агентом является screenwriter.ru, адрес агента: admin@screenwriter.ru, поэтому на титульной странице в правом нижнем углу вместо ваших имени, фамилии и контактного адреса, должно быть указано: screenwriter.ru, admin@screenwriter.ru.

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

4. Для сценариев, присланных на конкурс, перенос блоков «Описание действия» должен быть сделан только по абзацам(это связано с тем, что ваш текст еще будет загоняться в HTML-формат, HTML-страница будет намного длиннее вордовской и реплику, перенесенную по принципу «самое интересное впереди», будет неудобно читать).

5. Все пустые строки между блоками должны быть созданы только одним способом – нажатием клавиши ENTER. Сценарии с пустыми строками, созданные способом «много пробелов подряд» или «много табуляций подряд» (прецеденты были) на конкурс приниматься не будут.

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

7. Запрещается расставлять переносы в словах как вручную, так и автоматически. Даже если до конца строки останется много пустого места, не кидайтесь делать текст «красивее» и вставлять перенос в длинное слово. Переносов не должно быть ни при каких обстоятельствах (это связано с тем, что ваш текст еще будет загоняться в HTML-формат, HTML-страница будет немного шире вордовской и обе части слова, разбитого переносом, могут оказаться на одной строке. Читать будет неудобно).

8. Все параметры «Абзац» блоков сценария, выставляются с помощью программы «ПИСАРЬ», либо в специальном программном меню, а не вручную клавишами «пробел» и «табуляция». Не надейтесь на «авось сойдёт», читайте статью и используйте программу

9. В блоке «Время и место действия» между сокращениями ИНТ., НАТ., описанием места и описанием времени действия можно ставить либо пробелы, либо тире. Никаких других знаков препинания использовать не нужно.

10. Еще раз обращаю внимание: реплики героев не берутся в кавычки. Имена героев, равно как и любые другие слова сценария, не оформляются жирным шрифтом или курсивом. После имени героя двоеточие не ставится. Все ремарки берутся в скобки и пишутся с маленькой буквы. Блоки «Имя героя» и «Описание места и времени действия» пишутся заглавными буквами, все остальные блоки – обычными. Никаких рисунков в тексте быть не должно. Действие описывается только в настоящем времени.

Как оформить сценарий в ворде

портал для сценаристов

В связи с тем, что многие отправляют на конкурсы сценарии в неверном формате, SKRIPTR решил расписать правила оформления, а заодно и расписать сценарные сокращения и обозначения.

Первое, с чего всегда начинается оформление — это с разметки. Но этот этап, который сводил с ума сценаристов 50 лет тому назад, который заставлял их комкать листы бумаги и кидать в урну сейчас можно даже не учитывать. Все дело в программах, взявших на себя эту обязанность. А писателям остается лишь нажимать enter от блока к блоку. В качестве примера можно привести программу «КиТ сценарист». Не только по тому, что она является самым полным и подходящим вариантом для русского писателя, но и по тому, что разметка на SKRIPTR проводилась на базе этой программы. Но и другие сценарные программы также имеют уже установленную правильную сценарную разметку.

Главное, что нужно запомнить раз и навсегда: в программе word писать сценарии запрещено. Единственное, что нужно сразу понять, так это то, что писать необходимо в настоящем времени. Никакая программа никогда не сможет откорректировать это. А ведь процентов 90 начинающих именно этим и грешат, даже зная это правило. Но их можно понять, ведь в книгах всегда используется только прошедшее время.

Основных блоков в сценарии всего 4:

  • Время и место действия
  • Описание действия
  • Имя героя
  • Реплика героя.

Этими четырьмя блоками пользоваться, как говорят в науке, необходимо и достаточно, чтобы написать большинство сценариев. Но нередко стоит прибегнуть и к таким блокам как ремарка и титр.

Время и место действия

С этого блока начинается любая сцена.
Первые 3 буквы этого блока зависят от того, где происходит события сцены. Если в закрытом пространстве, то пишите ИНТ, если в открытом , то НАТ.
Если ваш блок ИНТ. СПАЛЬНЯ — ДЕНЬ, то если Ваш персонаж перешел на кухню, то Вам придется создавать новый блок.
Бывает ситуация, когда Вам нужно показать действия героев в разных локациях почти одновременно. Для этого можно ставить дробь, например: ИНТ/НАТ. ГАРАЖ/ПОЛЕ — ДЕНЬ. Это удобно использовать, если ваши герои разговаривают по телефону, а также если сюжет в этом участке динамичный.

Посредине мы пишем название места. Тут никаких нюансов.

Завершает этот блок «время действия».
Чаще всего используется стандартное УТРО, ДЕНЬ, ВЕЧЕР, НОЧЬ. Но при необходимости можно использовать и РАССВЕТ или ПОЗЖЕ.
Если необходимо написать точное время, то здесь необходимо использовать блок ТИТР, о котором сказано ниже.
Важно понимать, что УТРО, ДЕНЬ, ВЕЧЕР, НОЧЬ не являются источником света в кадре. Они являются как раз временем суток, для поддержания хронологии, в том висле и для самого сценариста.
А Если для вашего сценария не важно время, то его приписывать и необязательно. Например, если дело весь сценарий обстоит в комнате, как в фильме «комната».

Здесь описываются процессы вашей сцены.
Рекомендуется при большом объёме действий разбавлять текст диалогом, даже коротеньким междометием «ой». Но даже ежели текст окажется сплошной стеной, ошибкой это не будет.

Имя героя изначальна появляется не в этом блоке, а в предыдущем блоке описания. И полностью выделяется заглавными буквами. Но только при первом появлении. Также необходимо указать возраст героя цифрой рядом с именем: ДЕД (65). Описывать его нужно только в случае необходимости. У вышеупомянутого деда может быть борода, а может и нет, если в дальнейшем она никак не упоминается. Имя героя нельзя изменять по ходу сценария.

Реплика или диалог

Этим блоком Вы расписываете слова, которые ваш герой произносит.

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

Нужен для того, чтобы показать информацию, которую мы не можем показать действием или сеттингом. Например, «Штат Техас» или «1914 год», ведь зритель не может визуально определить, а для истории это важно.
Для оформления разумнее и проще всего использовать такую модель:
ТИТР: информация.

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

С ИЗ ЗТМ сценарий начинается, а ЗТМ он заканчивается. Но это может применяться и в середине сценария, чтобы подчеркнуть, например, глобальное изменение между сценами.

Крупный и общий планы
Операторская аббревиатура, но может быть очень полезной и для сценариста, чтобы подчеркнуть объект сеттинга четко и без лишних слов.

Пример: КП — телевизор.

Сразу понятно, что речь дальше пойдет о том, что в телевизоре или на нем.

Точка зрения персонажа
Это необходимо, чтобы составить описание, основанное на видении героя. Сам герой не должен быть в кадре, ведь съёмка происходит из его глаз.

Пример: ТЗ — президент

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

Пример: РАССКАЗЧИК (ЗК), БАНДИТ (ВПЗ)

Ставится рядом с именем героя в том случае, когда его реплика прервана чужим или его же действием.

Пример: ШРЕК (ПРОД.)

ВОСПОМИНАНИЕ или ФЛЭШБЭК

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

ИНТ. ГАРАЖ — ДЕНЬ — ВОСПОМИНАНИЕ
Текст воспоминания.
После окончания воспоминания мы пишем,
«ИНТ. ГАРАЖ — ДЕНЬ — ВЫХОД ИЗ ВОСПОМИНАНИЯ» или «ИНТ. ГАРАЖ — ДЕНЬ — НАСТОЯЩЕЕ ВРЕМЯ»

Примечание необходимо в случае, когда необходимо посвятить читателя в детали сценария. Например:

ПРИМЕЧАНИЕ: ВСЕ АФРИКАНЦЫ В СЦЕНАРИИ РАЗГОВАРИВАЮТ НА ФРАНЦУЗСКОМ ЯЗЫКЕ

ММ
Микрометр. Сценарий равный 1 странице.

КМ
Короткометражный. Сценарий длиной 2-30 страниц.

СМ
Среднеметражный. Сценарий длиной 31-59 страниц.

ПМ
Полнометражный. Сценарий длиной 60 и более страниц.

Логлайн
несколько строчек о вашей истории, заставляющие прочитать именно ваш сценарий, а не чей-либо

Синопсис
Краткое содержание вашей истории, рассказанное на листе А4.

Для удобства общения и своевременных уведомлений по важным новостям подписывайтесь на SKRiPTR в социальных сетях:

Как написать сценарий используя Microsoft Word

Почему вы должны тратить тысячи рублей на покупку программ для написания сценариев, когда у вас всегда есть под рукой замечательная и самая универсальная программа — Microsoft Word

Мы выполним эту задачу через так называемые макросы — программируемые кнопки для выполнения сложных задач. Мы запрограммируем их записав несколько действий, которые мы хотели бы, чтобы они выполняли. Мы создадим макрос для 1) Заголовка сцен 2) Описания 3) Имен героев 4) Диалогов 5) Фраз. Затем мы запишем макросы как образец. Форматирование сценариев базируется на стандартах Девида Тротье, которые описаны в книге THE SCREENWRITER’S BIBLE. Руководство предназначено для пользователей Word 2007.

  1. 1 Установите параметры страницы. Настройте поля страницы нажав на вкладке макет страницы, затем «Поля страницы», затем «Настраиваемые поля». Отступ у верхнего, нижнего и правого поля должны быть установлены — 1″. Отступ слева должен быть установлен — 1.5″. Установите шрифт Courier New, размер 12 pt (в ходе этих инструкций, шрифт должен остаться тем же).
  1. Откройте вкладку » Разработчик » нажав кнопку (верхняя левая кнопка), параметры Word (внизу), в новом окне установите флажок показывать вкладку » Разработчик » на верхней панели быстрого доступа.
  • 2 Настройка сцены заголовки. Откройте вкладку макет страницы. Щелкните на нижнем правом углу в разделе » абзац», чтобы открыть диалоговое окно. В разделе сделайте отступ перед текстом » 1″ и после текста 1.5″.
    1. Откройте вкладку » Разработчик». На левой стороне ленты нажмите кнопку «Запись макроса». Сохраните макрос в документе 1 (вместо нормального, так что мы можем сохранить его как отдельный сценарий шаблона). Имя макроса ‘сцена’ или ‘Заголовок’. Нажмите значок клавиатуры, чтобы назначить сочетание клавиш вызывающих макрос. Нажмите кнопку назначить, а затем закрыть.
    2. Вы должны увидеть значок магнитофона рядом с мышью. Нажмите на клавиатуре клавишу Enter дважды, чтобы пропустить две строки. Вернитесь во вкладку » макет страницы » и измените отступы обратно на 0. Откройте вкладку » Главная». Щелкните в нижнем правом углу в разделе «Шрифт», чтобы открыть диалоговое окно. В разделе эффекты установите «Все заглавные».
    3. Вернитесь на вкладку » Разработчик», и нажмите кнопку «Остановить запись». F2 теперь будет вызывать пропуск двух строк вниз и устанавливать текст заглавными буквами.
    4. 3 Повторите предыдущие действия за исключением: a) Установки заглавных букв. Перед записью макроса убедитесь, что эта функция выбрана, во время записи макроса вы должны будете выключить ее. b) назовите макрос «Описание» и установите вызывающую клавишу F3. Убедитесь, что первый записанный шаг — это пропуск двух строк. После этого остановите запись, теперь клавиша F3 будет отвечать за пропуск двух строк и написание текста строчными буквами.
    5. 4 Для установки имен персонажей, повторите предыдущие шаги, за исключением: a) после установки отступов обратно на 0 значение, нажмите пробел 22 раза, затем выберите «Текст заглавными» b) назовите макрос как «Персонажи» и установите клавишу вызова — F4. Убедитесь, что первое действие, которое записано в данном макросе — отступ на две строки. После нажатия «Остановка записи», F4 будет пропускать две строки и устанавливать курсор на правильной позиции для написания имени героя заглавными буквами.
    6. 5 Настройка диалога. Перед записью убедитесь, что «Текст заглавными» выбран в опции и отступы по краям установлены в значении 0. Назовите этот макрос как «Диалог» и создайте клавишу вызова как F5. Во время записи макроса a) пропустите одну строку вниз b) Установите отступ в размере 1″ и 1.5″ c) отмените «Текст заглавными». При нажатии F5 теперь будет автоматически пропускаться одна строка, курсор будет устанавливаться на правильной позиции и текст будет вводиться строчными буквами.
      • Перед записью убедитесь, что «Текст заглавными» выбран в опции и отступы по краям установлены в значении 0. Назовите эту форму ‘Диалог’ и установите для нее горячую клавишу F6. Во время записи a) сделайте отступ на строкку ниже б) установите отступы по краям 1.6″ и 2.4″ в) сделайте отмену «Все буквы заглавными». F6 теперь будет выполнять команду отступ вниз, на правильной позиции с у становленными отступами прописными буквами.
      • Сохраните документ Word Macro-Enabled Template. Дайте ему простое название ‘Сценарная кодировка’. Когда вы захотите написать сценарий, нажмите на этот документ и вы получите уже готовую разметку для работы.
      • Понравилась статья? Поделить с друзьями:
      • Параметры сценария автозагрузки gpo
      • Параметры сценариев реализации проекта развивающего центра
      • Парам на праздники актеры
      • Паразиты сценарий фильма
      • Параджанов исповедь сценарий