Разное

Учимся писать скрипты с нуля: Как писать на JavaScript / Skillbox Media

Содержание

Руководство по написанию скриптов в Linux Bash

Введение

Набор встроенных команд bash (и его аналогов sh, zsh, etc) совместим с любым POSIX-совместимым приложением в Linux, что позволяет встроить в ваш bash-скрипт любое совместимое приложение. Это дает очень большой набор возможностей в сфере автоматизации рутинных задач администрирования систем Linux, деплоя и сборки приложений, различных пакетных обработок, в том числе аудио и видео.

Командная строка — самый мощный пользовательский интерфейс из существующих на данный момент. Базовый уровень знаний получить достаточно просто. Рекомендуется изучить руководство bash. Это можно сделать, выполнив команду man bash.

Суть bash-скриптов — записать все ваши действия в один файл и выполнять их по необходимости.

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

Развертывание среды

Для выполнения скриптов, которые мы будем учиться писать, нужна среда. Если вы используете на своем компьютере систему Linux, вы можете делать все локально. Если Windows, — можете установить WSL/WSL2. Кроме того, вы можете создать виртуальный сервер и подключиться к нему по SSH. Так вы не навредите своему компьютеру если что-то пойдет не так.

Мы выбрали вариант создать виртуальную машину.  Залогинимся в личном кабинете https://my.selectel.ru/, нажав на вкладку «Облачная платформа». Там вы сможете создать виртуальный сервер.

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

Нажмем «Создать сервер». 

В разделе «Источник» убеждаемся, что выбран образ Ubuntu 20.04.

Конфигурацию можно настроить по своим потребностям.

В разделе «Сеть» стоит выбрать «Подсеть — Плавающий IP-адрес».

В разделе «Доступ» загрузите SSH-ключ и не забудьте сохранить root-пароль. Подробнее об этом рассказано в этой статье

Теперь можно создать сервер кнопкой «Создать» в самом низу.

Будет отображена страница статуса сервера, надо дождаться индикации ACTIVE вверху справа.

Теперь на вкладке «Порты» можно посмотреть IP-адрес, присвоенный серверу.

Не копируйте чужой код


Копирование чужого кода на свой компьютер/сервер опасно. Ранее существовал «патч Бармина», представляющий из себя команду rm -rf /*. Ее очень любили давать новичкам Linux на некоторых конференциях в качестве универсального средства от всех проблем. Суть команды — рекурсивное удаление всех каталогов внутри корневого каталога, т. е. всех системных и пользовательских файлов. Сейчас эта команда не сработает во всех актуальных версиях Linux, но раньше она служила злой шуткой и наказанием тем, кто копировал чужие скрипты на свои серверы и выполнял их. Способов навредить серверу/компьютеру все еще достаточно, но они не столь очевидны.

Выбор редактора

Вам потребуется удобный текстовый редактор. Если вы подключаетесь по SSH, то лучшим выбором будут 3 варианта:

  • * vim (если умеете из него выходить)
  • * nano (прост, удобен и надежен)
  • * mcedit (входит в пакет mc, классический двухпанельный консольный файловый менеджер)

Если вы делаете все локально, выбор полностью на вас. Обычный выбор под Linux — gedit. В этой инструкции мы пользовались nano через SSH на удаленном сервере.

Запуск “Hello, World!”

Первая программа, которую обычно пишут программисты это «Hello, World!» —  простой вывод этой строки. Мы тоже с этого начнем. За вывод строки в консоль отвечает команда echo. Прямо в консоли вы можете напечатать echo «Hello, World!» и получить соответствующий вывод:

root@geneviev:~ # echo "Hello, World!"
Hello, World!

Сделаем это программой. Команда touch helloworld.sh создаст файл helloworld.sh. Команда nano helloworld.sh откроет этот файл для редактирования. Заполним файл нашей программой:

#!/bin/bash
echo "Hello, World!"

Для выхода с сохранением из nano надо нажать CTRL + O для сохранения (после чего нажать enter для перезаписи текущего открытого файла), а потом CTRL + X для выхода. Можно выходить без сохранения, при этом он спросит, точно ли вы хотите выйти без сохранения. Если да, надо нажать N для выхода без сохранения. Если вы нажмете Y, он спросит куда сохранить измененный файл, можно нажать enter для перезаписи редактируемого файла.

Разберем, что мы написали.

Первой строкой идет #!/bin/bash — фактически это указание на местоположение интерпретатора. Чтобы при запуске скрипта не требовалось указывать отдельно интерпретатор. Убедиться, что ваш bash интерпретатор лежит по этому пути можно через команду which bash:

root@geneviev:~ # which bash
/usr/bin/bash

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

Запустить ваш скрипт/команду можно двумя способами.

Способ №1: bash helloworld.sh. Вы вызываете интерпретатор и в аргументе передаете ему имя файла для исполнения.

root@geneviev:~ # bash helloworld.sh 
Hello, World!

Способ №2: Сначала надо разрешить системе исполнять скрипт: chmod +x helloworld.sh. Эта команда сделает файл исполняемым. Теперь вы можете запустить его как любой бинарный файл в linux: ./helloworld.sh

root@geneviev:~ # ./helloworld.sh 
Hello, World!

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

Аргументы

Это параметры, которые вы можете передать программе при ее вызове. Например, программа ping принимает в качестве обязательного аргумента IP-адрес или DNS-имя, которое требуется пропинговать: ping selectel.ru. Это простой и удобный способ общения пользователя с программой.

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

X это число. $0 — всегда имя исполняемого скрипта. $1 — первый аргумент, $2 — второй и так далее. Конечно, если вы планируете передавать пару десятков аргументов вашему приложению, это может быть несколько утомительно, так что вам понадобится что-то вроде этого цикла, чтобы перебрать все поступившие аргументы:

for var in "$@"; do
    echo "$var"
done

Подробнее про циклы будет рассказано в следующих разделах.

Пример, создадим новый файл: touch hellousername.sh. Выдаем права на исполнение chmod +x hellousername.sh.

Открываем nano hellousername.sh

Код примера следующий:

#!/bin/bash 

echo "Hello, $1!"

Сохраняем, закрываем. Смотрим, что получилось.

root@geneviev:~ # .
/hellousername.sh Vasya Hello, Vasya!

Программа получилась маленькая, но она учит пользоваться (на самом базовом уровне) аргументами, которые мы в нее можем передать. В данном случае аргумент передается один, Vasya, мы сразу его используем, не делая никаких проверок. 

root@geneviev:~ # ./hellousername.sh 
Hello, !

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

Способ №1

#!/bin/bash
if [ "$#" -lt 1 ]; then
    echo "Недостаточно аргументов. Пожалуйста, передайте в качестве аргумента имя. Пример: $0 Vasya"
    exit 1
fi
echo "Hello, $1!"

Более подробно конструкцию if then [else] fi мы рассмотрим далее, пока не будем на ней останавливаться. Важно понимать, что тут проверяется. $# Это число аргументов без учета имени скрипта, который всегда $0.

 

Способ №2

#!/bin/bash
if [ -z "$1" ]; then
   echo "Имя пустое или не передано. Пожалуйста, передайте в качестве аргумента имя. Пример: $0 Vasya"
   exit 1
fi

echo "Hello, $1!"

Здесь тоже используется конструкция if then [else] fi. Ключ -z в if используется для проверки переменной на пустую строку. Есть противоположный ключ -n, он проверяет что строка не пустая. Конечно, этот способ некорректно использовать для проверки входящих аргументов, но в теле самой программы он будет полезен. Например, чтобы проверить что выполненное в самой программе приложение что-то вернуло.

Управляющие конструкции

if-else

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

if else. В bash это также присутствует.

Возьмем один из примеров выше.

#!/bin/bash
if [ "$#" -lt 1 ]; then
    echo "Недостаточно аргументов. Пожалуйста, передайте в качестве аргумента имя. Пример: $0 Vasya"
    exit 1
fi
echo "Hello, $1!"

Происходит проверка системной переменной $# на то, что она меньше, чем (lower than, -lt) 1. Если это выражение истинно, мы переходим в блок команд, открывающийся ключевым словом then. Весь блок, начинающийся с if, должен завершаться ключевым словом fi. Более сложная структура ветвления может выглядеть примерно так:

if TEST-COMMAND1
then
  STATEMENTS1
elif TEST-COMMAND2
then
  STATEMENTS2
else
  STATEMENTS3
fi

Реальный пример:

#!/bin/bash
if [ "$#" -lt 1 ];
then
    echo "Недостаточно аргументов. Пожалуйста, передайте в качестве аргумента имя. Пример: $0 Vasya"
    exit 1
fi
if [ "$1" = "Vasya" ]; then
        echo "Whatsupp, Vasiliy?"
elif [ "$1" = "Masha" ];
then
        echo "Hey, Masha"
elif [ "$1" = "Michael" ];
then
        echo "Shalom, Michael"
else
        echo "Hi, $1"
fi

Вывод программы:

root@geneviev:~ # . /hellousername.sh Vasya
Whatsupp, Vasiliy?
root@geneviev:~ # ./hellousername.sh Masha
Hey, Masha
root@geneviev:~ # ./hellousername.sh Michael
Shalom, Michael
root@geneviev:~ # ./hellousername.sh Andrew
Hi, Andrew
root@geneviev:~ # ./hellousername.sh 
Недостаточно аргументов. Пожалуйста, передайте в качестве аргумента имя. Пример: ./hellousername.sh Vasya

Выражение «$1» = «Vasya» проверяет строки на идентичность. Блок после else выполняется только если выше не найден более подходящий блок.

&& и ||

В предыдущей главе вы могли заметить, что я использовал exit 1 для завершения работы программы в случае неуспешной проверки аргумента. Это означает, что программа завершилась с ошибкой. В bash есть операторы && и ||, которые используются для создания цепочек команд. Каждая цепочка зависит от результата выполнения предыдущей программы.

Пример 1: command1 && command2. В этом случае command2 выполнится, только если command1 завершится с кодом 0 (exit 0, по умолчанию). 

Пример 2: command1 || command2. В этом случае command2 выполнится, только если command1 завершится с кодом отличным от 0. 

Пример 3: command1 && command2 || command3. Если command1 завершится с кодом 0, то будет выполнен command2, иначе command3.

Переменные

Как гласит один из основных принципов программирования — Do Not Repeat Yourself (DRY). Вот и мы не будем повторять себя и перепишем предыдущий пример с использованием переменных, чтобы не вызывать echo каждый раз.

Переменные в bash создаются присваиванием: x=»foo bar» или z=$1. Переменной x мы присвоили строку @foo bar«, а переменной z мы присвоили значение первого аргумента. Использовать именованные переменные гораздо удобнее, чем использовать $1

, особенно когда надо использовать его значение во многих местах.

К тому же, аргументы могут идти в разном порядке. Осмысленные названия переменных очень важны, при разрастании программы это снизит неизбежную путаницу. Избегайте имен переменных (и функций) вроде «a», «b», «zzzz», etc.

Чтобы не вызывать echo в каждом варианте с разными строками, разобьем строку на части. Первая часть будет приветствием. Вторая — именем. Третья — завершающим знаком препинания. Его можно не выносить в переменную.

#!/bin/bash

greetString="Hello"
nameString="stranger"

if [ "$#" -lt 1 ];
then
    echo "Недостаточно аргументов. Пожалуйста, передайте в качестве аргумента имя. Пример: $0 Vasya"
    exit 1
fi

if [ "$1" = "Vasya" ]; 
then
    nameString="Vasiliy"
	greetString="Whatsup"
elif [ "$1" = "Masha" ];
then
	nameString="Maria"
elif [ "$1" = "Michael" ];
then
	greetString="Shalom"
	nameString="Michael"
fi

echo "$greetString, $nameString!"

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

Switch case

Использование if-else конструкции в нашем примере не является оптимальным вариантом. Мы всего лишь сверяем значение переменной с определенным набором значений. В такой ситуации лучшим выбором будет switch-case-конструкция.

case "$variable" in

 "$condition1" )
 command...
 ;;

 "$condition2" )
 command...
 ;;

esac

Перепишем нашу программу приветствий с использованием

switch-case:

#!/bin/bash

name=$1

case "$name" in
  "Vasya" )
    nameString="Vasiliy"
	greetString="Whatsup"
  ;;
  "Masha" )
	greetString="Hey"
	nameString="Maria"
  ;;
  * )
	greetString="Hello"
	nameString="stranger"
  ;;
esac

echo "$greetString, $nameString!"

Циклы

Как и любой полноценный язык программирования, bash поддерживает циклы. Цикл for и цикл while. Циклы нужны, чтобы выполнять какой-то код заданное число раз. Например, при парсинге CSV перебирать построчно и каждую строку рассматривать отдельно.

Цикл for

Вот пример структуры цикла for:

for var in list
do
команды
done

Простой реальный пример:

#!/bin/bash

for name in Maria Vasya Michael stranger
do
	echo "Hello, $name!"
done

Вывод:

root@geneviev:~ # ./cycle.sh 
Hello, Maria!
Hello, Vasya!
Hello, Michael!
Hello, stranger!

Программа просто перебирает все имена, разделенные пробелом, и выводит их с помощью echo.

Попробуем немного усложнить пример:

#!/bin/bash
file=$1
for name in $(cat $file)
do 
	echo "Hello, $name!"
done

Создадим файл с именами touch names и запишем в него список имен для приветствия:

Maria
Vasiliy
Ivan
Nikolai
Innokentiy

Вывод:

root@geneviev:~ # . C. Это символ прерывания выполнения программы. В нашем случае мы вызвали программу без аргумента, и она вошла в вечный цикл. Можно сказать, зависла. Пришлось завершить ее принудительно. Не забывайте делать проверки входных данных в реальных программах.  Как это делать, можете посмотреть в главах if-else и switch case, например.  

В нашей программе есть небольшой баг. Модифицируем файл имен:

Erich Maria Remarque
Vasiliy
Ivan
Nikolai
Innokentiy

Запустим программу, получим вывод:

root@geneviev:~ # ./cycle.sh names
Hello, Erich!
Hello, Maria!
Hello, Remarque!
Hello, Vasiliy!
Hello, Ivan!
Hello, Nikolai!
Hello, Innokentiy!

Как говорится, «Кто все эти люди?». Так получается, потому что у нас не задана переменная окружения IFS (Internal Field Separator), указывающая на разделители полей. Наш цикл использует пробелы и переносы строки как разделители. В начале скрипта (после #!/bin/bash) укажите использовать перенос строки как разделитель полей: IFS=$’\n’.  

root@geneviev:~ # ./cycle.sh names 
Hello, Erich Maria Remarque!
Hello, Vasiliy!
Hello, Ivan!
Hello, Nikolai!
Hello, Innokentiy!

В итоге мы получим возможность работать со строками целиком. Это пригодится для парсинга CSV.

Обычно цикл for используется со счетчиком. В C-like стиле. Что-то вроде for (i=0;i<10;i++){}. В bash тоже так можно. 

#!/bin/bash
for (( i=1; i 

Цикл while

Схема организации цикла while:

while команда проверки условия
do
другие команды
done

Простой способ сделать бесконечную петлю (бесконечный цикл):

while true
	do
	echo "this is infinity loop"
done

Это может пригодится, например, когда вам нужно вызывать что-то чаще, чем позволяет cron (например, раз в минуту). Или когда вам просто надо проверять какое-то значение постоянно. Областей применения у бесконечных циклов много.

Здесь используются те же самые выражения, что и в if:

#!/bin/bash
count=0
while [ $count -lt 10 ]
do
	(( count++ ))
	echo "count: $count"
done

Вывод:

root@geneviev:~ # . /cycle.sh 
count: 1
count: 2
count: 3
count: 4
count: 5
count: 6
count: 7
count: 8
count: 9
count: 10

Из цикла можно выйти с помощью команды break (работает также и для for):

#!/bin/bash
count=0
while [ $count -lt 10 ]
do
	(( count++ ))
	echo "count: $count"
	if [ "$count" -gt 5 ]
	then
		break
	fi
done

Вывод:

root@geneviev:~ # ./cycle.sh 
count: 1
count: 2
count: 3
count: 4
count: 5
count: 6

Заключение

Несмотря на огромную конкуренцию в сфере автоматизации рутины со стороны python, ruby, perl bash не сдает позиции. Он прост в освоении и использовании, гибок и так или иначе присутствует в абсолютном большинстве дистрибутивов Linux.

В этой статье были приведены только основы написания программ на bash. Надеемся, вы нашли их полезными для себя.

Скрипт (Script) - что это такое, сценарные языки программирования

Что такое скрипт и скриптовый язык

Скрипт (script с англ. сценарий) — это небольшая программа, которая последовательно выполняет список однотипных задач. Простыми словами, скрипт - это автоматизация какого-то рутинного процесса: заменить в статье дефисы на тире, кавычки лапки (“”) на ёлочки («») или подготовка файлы сайта для загрузки на сервер.

Присоединяйтесь к нашему Telegram-каналу!

  • Теперь Вы можете читать последние новости из мира интернет-маркетинга в мессенджере Telegram на своём мобильном телефоне.
  • Для этого вам необходимо подписаться на наш канал.

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

  1. Открыть сайт X.
  2. Нажать кнопку Y.
  3. Подождать N секунд.
  4. Закрыть сайт и так далее.

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

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

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

Читайте также:

FTP: что это такое, программы для доступа по FTP

Сейчас будет моё личное мнение:

Сложно выделить, что делает язык скриптовым. Например, Java таковым не считается, хотя он подходит по всем критериям:

  • На нем можно писать инструкции для компьютера, которые будут выполняться как сценарий.
  • Java компилируется в байт-код, который во время запуска интерпретируется в машинный язык.
  • В нем допустима динамическая типизация, благодаря дженерикам.
  • У него достаточно высокий уровень абстракции — то же объектно-ориентированное программирование.

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

На мой взгляд, есть всего один корректный критерий классификации: язык должен быть создан специально для того, чтобы выполнять сценарии внутри какой-либо программы. Например, VBA, на котором пишут макросы для Excel, или WitcherScript для игр The Witcher 3 и CyberPunk 2077, а также sh для терминалов.

Читайте также:

Гид по пользовательскому тестированию: что это такое, как сделать и почему оно важно

Какие бывают типы скриптов

Скрипты и языки для их написания можно разделить на следующие типы:

  • Консольные или командные — Bash, PowerShell.
  • Расширяющие или встраиваемые — JavaScript, Lua, VBA.
  • Макросы или скрипты графического интерфейса — зависит от программы.
  • Универсальные — Python, PHP, JavaScript.

На каких языках нельзя писать скрипты

Существуют языки, созданные для решения конкретных задач и не предполагающие написания алгоритмов (разве что математических). Например, язык для аналитики данных R.

Рассмотрим возможности двух языков на примере анализа данных:

Таблица выше показывает, насколько ограничен узкоспециализированный R по сравнению с языком общего назначения Python.

Скрипты нельзя писать на:

  • R — он используется только для аналитики данных.
  • SQL — предназначен только для запросов к базам данных.
  • MATLAB — только для математических вычислений.
  • Solidity — для написания смарт-контрактов.

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

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

Где и кем используются скриптовые языки

Языки, поддерживающие написание скриптов, используются во всех сферах и для решения всех задач:

  • Разработка под iOS или OS X — Swift.
  • Разработка под Android — Java или Kotlin.
  • Создание игр — C# или C++.
  • Веб-разработка — PHP, Python, JavaScript.
  • Аналитика — Python, Java, JavaScript.
  • Программирование устройств — Python, C++.

Формальных ограничений на использование тех или иных языков в разных сферах нет — просто могут быть некоторые сложности. Например, можно создать приложение для OS X хоть на Python, просто оно будет медленно работать. Можно создать интерфейс сайта хоть на ассемблере — но тут уже медленно работать будете вы.

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

  • WitcherScript или Lua для написания квеста для игры.
  • VBA для создания макроса для бухгалтерской таблицы.

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

Продвижение сайта в ТОП-10

  • Оплата по дням нахождения в ТОП
  • Подбираем запросы, которые приводят реальных покупателей!

Как скрипты помогают в SEO

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

  • Это теоретически возможно.
  • Есть достаточно времени на написание кода.
  • Есть достаточно времени на выполнение кода.

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

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

Вот ещё несколько полезных примеров:

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

Читайте также:

SEO анализ конкурентов - подробное руководство

И все эти скрипты уже кем-то написаны и давно используются в индустрии. Например, с помощью PageSpeed от Google можно проверить скорость загрузки сайта, узнать о возможных причинах торможения и понять, что можно исправить и улучшить. Яндекс.Метрика позволяет вести статистику посещений и следить за активностью пользователей.

В зависимости от вашего знания предметной области и вашей фантазии вы можете придумать еще какие-то скрипты, написать их или заказать их разработку. Это может быть что-то новое, а может быть и объединением нескольких других скриптов. Например, можно взять готовый скрипт мониторинга и добавить в него отправку уведомлений в Телеграм или запуск каких-нибудь служб восстановления.

Преимущества и недостатки скриптов

Преимущества скриптов делают их идеальным инструментом для задач, для которых они используются:

  1. Их легко написать, что экономит время. Они небольшие, поэтому можно особо не переживать из-за чистоты кода или правильной архитектуры.
  2. Их не нужно встраивать в целую систему, чтобы выполнить какие-то действия.
  3. Не нужно беспокоиться о кроссплатформенности кода — скрипты пишутся под определенные задачи и запускаются сразу на целевых платформах.
  4. Гибкость — можно добавить в программу любые действия и параметры. А в случае необходимости скрипт легко переписывается.

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

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

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

Важно! Язык — это инструмент. Подбирайте подходящий для ваших задач — список был в разделе выше.

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

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

Третий шаг — придумайте несколько небольших проектов и реализуйте их на своем языке. Чем меньше у вас опыта — тем меньше должен быть проект. Не нужно строить Бурдж-Халифа, если вы ни одного гвоздя в жизни не забили. Второй и третий шаги можно совмещать.

Практиковаться нужно как можно больше, а начинать — как можно раньше. Теория важна, но без практики ничего не стоит, потому что программирование — это про решение проблем, а не про алгоритмы, структуры, парадигмы и другие умные слова.

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

Технический аудит сайта

  • Наличие дублей страниц, безопасность, корректность всех технических параметров: переадресаций, robots.txt, sitemap.xml скорость загрузки и др.
  • Техническая оптимизация - один из основных этапов в продвижении.

Как написать сценарий (пошаговое руководство)

Люк Лейфилд, автор контента

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

  1. 1) Заложить основу
  2. 2) Наполнить историю
  3. 3) Написать сценарий
  4. 4) Подвести итоги

Все великие фильмы начинаются с раскадровки.

Попробуйте программное обеспечение для раскадровки №1, созданное для кинематографистов.

Попробуйте Boords бесплатно

2 245 кинематографистов подписались на Boords на прошлой неделе

Заложите основу

1. Знайте, что такое сценарий на самом деле

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

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

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

2. Прочитайте несколько сценариев

Первый шаг к блестящему сценарному мастерству — прочитать несколько отличных сценариев — столько, сколько вы сможете переварить. Особенно хорошей идеей будет прочитать что-нибудь в том жанре, в котором будет ваш сценарий, чтобы вы могли получить общее представление. Если вы пишете комедию, попробуйте поискать «50 лучших комедийных сценариев» и начните оттуда. Многие скрипты доступны бесплатно в Интернете.

3. Прочитайте несколько книг по написанию сценариев

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

  • Ваш сценарий отстой! – Уильям М. Акерс
  • Сценарист «Кофе-брейк» – Пилар Алессандра
  • Сценарий 21 века – Линда Аронсон
  • Техника ореховой скорлупы – Джилл Чемберлен
  • Искусство драматического письма – Лайош Эгри
  • Сценарий — Сид Филд
  • Последовательный подход — Пол Джозеф Гулино
  • Написание сценариев, которые продают — Майкл Хейг McKee
  • Моя история может превзойти вашу историю — Джеффри Алан Шехтер
  • Сделать хороший сценарий великим — Линда Сегер
  • Спасти кота — Блейк Снайдер
  • Путешествие писателя — Кристофер Фоглер
  • В лес – Джон Йорк

4. Посмотрите отличные фильмы

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

Все великие фильмы начинаются с раскадровки. Попробуйте программное обеспечение для раскадровки №1, созданное для кинематографистов.

Попробуйте Boords бесплатно

2 245 кинематографистов подписались на Boords на прошлой неделе

Конкретизируйте историю

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

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

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

6. Напишите лечение (также известное как более подробное изложение)

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

Ваш синопсис должен давать хорошее представление о вашей истории, включая важные «удары» (события) и повороты сюжета. Он также должен представить ваших персонажей и общую атмосферу истории. Любой, кто ее читает (надеюсь, крутой продюсер), должен узнать достаточно, чтобы начать чувствовать связь с вашими персонажами и хотеть увидеть, что с ними происходит.

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

7. Развивайте своих персонажей

Каков главный вопрос вашей истории? Что это такое? Развитие персонажа означает отправку ваших персонажей в трансформационное путешествие, чтобы они могли ответить на этот вопрос. Возможно, вам будет полезно заполнить рабочий лист профиля персонажа, когда вы начнете конкретизировать своих персонажей (вы можете найти их бесплатно в Интернете). Кем бы ни были ваши персонажи, самое главное, чтобы ваша аудитория хотела узнать их поближе и могла им сопереживать. Даже злодей!

8. Напишите свой сюжет

К этому моменту у вас должно быть довольно четкое представление о том, о чем ваш рассказ. Следующим шагом является разбиение истории на мелкие кусочки и подстрекательство к событиям, составляющим сюжет, который некоторые люди называют «протоколом». Есть много разных способов сделать это. Некоторые люди используют карточки. Некоторые используют блокнот. Другие могут использовать цифровые инструменты, такие как Trello, Google Docs, Notion и т. д.

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

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

Все великие фильмы начинаются с раскадровки. Попробуйте программное обеспечение для раскадровки №1, созданное для кинематографистов.

Попробуйте Boords бесплатно

2 245 кинематографистов подписались на Boords на прошлой неделе

Напишите сценарий

9. Знайте основы

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

  • 90-120 страниц длиной
  • Написан шрифтом Courier, 12 пунктов
  • Напечатан на белой бумаге размером 8,5 x 11 дюймов с тремя отверстиями

Поклонники шрифтов могут отказаться от использования Courier вместо своих любимых Futura или Comic Sans. Однако это не подлежит обсуждению. Любовь киноиндустрии к «Курьеру» не только стилистическая, но и функциональная. Одна страница сценария в 12-балльном Курьере — это примерно одна минута экранного времени.

Вот почему количество страниц для среднего сценария должно быть от 90 до 120 страниц, хотя стоит отметить, что это немного отличается в зависимости от жанра. Комедии обычно короче (90 страниц/1,5 часа), а драмы могут быть немного длиннее (120 страниц/2 часа). Короткометражный фильм будет еще короче. Очевидно.

10. Напишите первую страницу

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

  • Верхнее, нижнее и правое поля сценария составляют 1 дюйм
  • Левое поле составляет 1,5 дюйма (дополнительные полдюйма пустого пространства слева от страницы сценария позволяют связать сценарий с помощью скоб, но все же делает документ сбалансированным с точки зрения количества текста на странице)
  • Весь документ должен быть напечатан через один интервал
  • Первым пунктом на первой странице должны быть слова 'FADE IN:'
  • Первая страница никогда не нумеруется
  • Остальные страницы указываются в верхнем правом углу , 0,5 дюйма от верха страницы, вровень с полем

11.

Отформатируйте свой сценарий Пример сценария с общего собрания команды Boords

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

Заголовок сцены

Отступ: слева: 0,0 дюйма / справа: 0,0 дюйма / ширина: 6,0 дюйма

Пример: 'EXT. BAKERY — NIGHT' говорит о том, что действие происходит за пределами пекарни в ночное время.

Подзаголовок

Отступ: слева: 0,0" / справа: 0,0 дюйма / ширина: 6,0 дюйма

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

Действие

Отступ: слева: 0,0" / справа: 0,0" / ширина: 6,0"

Это повествовательное описание того, что происходит в сцене, и оно всегда пишется в настоящем времени. Вы также можете назвать это направление , визуальная экспозиция, черный материал, описание или направление сцены. Не забудьте включить только то, что ваша аудитория может видеть или слышать. представить персонажа, вы должны написать его имя в действии с большой буквы. Например: «Машина разгоняется и обгоняет Джорджию, мускулистую женщину лет пятидесяти со стальными нервами».0003

Вы всегда должны писать имя каждого персонажа заглавными буквами и указывать его диалоги. Вы можете включать второстепенных персонажей без имен, например «МЯСНИК» или «ЮРИСТ».

Диалог

Отступ: слева: 1,0 дюйма / справа: 1,5 дюйма / ширина: 3,5 дюйма

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

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

Расширение

Размещается после имени персонажа в круглых скобках

Это сокращенное техническое примечание, которое вы ставите после имени персонажа, чтобы показать, как его голос будет слышен на экране. Например: если ваш персонаж говорит голосом за кадром, это будет выглядеть как «ДЭВИД (ЗК)».

Переход

Отступ: слева: 4,0 дюйма / справа: 0,0 дюйма / ширина: 2,0 дюйма

Переходы — это инструкции по редактированию фильма, которые обычно появляются только в сценарии съемки. Например:

  • ВЫРЕЗАТЬ:
  • РАСТВОРИТЬ:
  • SMASH CUT:
  • QUICK CUT:
  • FADE TO:

способ описать происходящее в рассказе. Например, вы можете использовать «РАСТВОРИТЬ В:», чтобы показать, что прошло много времени.

Кадр

Отступ: слева: 0,0 дюйма / справа: 0,0 дюйма / ширина: 6,0 дюйма

Снимок сообщает читателю, что фокус в сцене изменился. Опять же, это не то, что вы должны использовать очень часто в качестве спец сценарист. Это работа режиссера! Примеров:

  • РАКУРС НА --
  • КРУПНЫЙ ПЛАН --
  • ПАНОРАМИРОВАНИЕ --
  • ГЛАЗА ДЕЙВА --

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

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

Не включайте в сценарий спецификации какие-либо элементы из сценария съемки, такие как ракурсы камеры или монтажные переходы. Сделать это заманчиво — естественно, у вас есть свое мнение о том, как должна выглядеть история, — но это категорически нет-нет. Если вы хотите добиться своего с этим, попробуйте путь независимого режиссера. Если вы хотите продать свой сценарий, придерживайтесь правил.

13. Выбери свое оружие

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

  • Celtx
  • Fade In
  • Final Draft
  • Highland
  • Movie Magic Сценарист
  • Movie Outline
  • Montage
  • StudioBinder
  • WriterDuet

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

  • Контур
  • Драматика
  • Спасите кота!

14. Составьте план

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

В первом черновике сконцентрируйтесь на том, чтобы слова попали на страницу. Не будьте слишком критичны — просто пишите все, что приходит вам в голову, и следуйте плану. Если вы сможете прокручивать 1-2 страницы в день, то через два-три месяца у вас будет первый черновик. Легкий!

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

15. Прочтите вслух

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

16. Сделайте перерыв

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

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

17. Делайте заметки

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

18. Поделитесь с другом

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

Все великие фильмы начинаются с раскадровки. Попробуйте программное обеспечение для раскадровки №1, созданное для кинематографистов.

Попробуйте Boords бесплатно

2 245 кинематографистов подписались на Boords на прошлой неделе

Подведем итоги

19.

Напишите окончательный вариант

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

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

20. Презентация и переплет

При написании сценария на все есть правила. Даже то, как вы связываете вещь. Пристегнитесь!

  • Первая страница – это титульный лист, на котором нужно написать – как вы уже догадались! – шрифт Courier размером 12 пунктов
  • На титульном листе должно быть название вашего сценария с пометкой «автор» и вашим именем посередине страницы
  • Поместите контактную информацию в нижний левый или правый угол
  • Вы также можете поместить Registered, WGA или уведомление об авторских правах в нижний левый или правый угол, но это совершенно необязательно. материалы, которые вам понадобятся для подготовки сценария перед его отправкой и завоеванием мира:

    • обложки для сценариев (льняные или стандартные картонные)
    • перфорированная бумага с тремя отверстиями
    • латунные застежки для сценария (также известные как скобы). Акко номер 5, размер 1 1/4 дюйма, для сценариев объемом до 120 страниц. Акко номер 6, размер 2 дюйма, для больших шрифтов
    • Молоток для переплета сценария (дополнительно)
    • Латунные шайбы для сценария
    • Почтовые держатели для сценария

    Вот как связать сценарий:

    • Распечатайте титульный лист и сценарий на ярко-белой перфорированной бумаге с тремя отверстиями
    • Вкладыш титульный лист и сценарий в обложку сценария. Передняя и задняя крышки должны быть пустыми — они нужны только для защиты письма
    • Вставьте две латунные застежки в первое и третье отверстия. Оставьте среднее отверстие пустым
    • Переверните скрипт и наденьте латунные шайбы на выступы застежек. Расправьте плечи застежек поперек сценария. (Дополнительно: используйте молоток для переплета сценария, чтобы он получился особенно вкусным.)
    • Используйте почтовые программы для отправки сценария фильма голливудским шишкам
    • Добейтесь славы и богатства. Поблагодарите Boords в своей речи на вручении Оскара

    Пишете сценарий? Тогда вам нужна раскадровка. Попробуйте программное обеспечение для раскадровки №1, созданное для кинематографистов.

    Попробуйте Boords бесплатно

    2 245 кинематографистов подписались на Boords на прошлой неделе

    Bash с нуля: изучите достаточно bash, чтобы писать собственные сценарии

    Вам, вероятно, следует прочитать сообщение @maxwell_dev: Введение в Shell, которое я хотел бы иметь до этого

    Мне постоянно приходится писать сценарии оболочки, потому что они могут быть очень удобны для автоматизации задач. Или, что наиболее важно, потому что я забыл полные команды, чтобы что-то сделать, и я не хочу продолжать искать документы; то ли документация хреновая, то ли я просто ленивый 🙂

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

     mvn чистая установка -PautoInstallPackage,-codeQuality,-frontend -Dcrx.user=user1 -Dcrx.password=pass1
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Это неинтуитивно, и я хотел что-то более простое, например:

     ./install -codeQuality -frontend --user user1 --password pass1
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    или короче:

     ./install -c -f -u пользователь1 -p пароль1
     
    Войдите в полноэкранный режимВыйдите из полноэкранного режима

    В этот момент вы можете подумать, чем это лучше, чем реальная команда maven? Хорошо:

    1. Я добавляю документацию к моему сценарию install . И я печатаю документацию, когда запускаю install help
    2. Мои сценарии выводят полные команды, которые они выполняют.
    3. Сама команда является частью скрипта, я всегда могу заглянуть внутрь своего скрипта, чтобы найти ее.

    Теперь, когда это не так, давайте изучим скрипты оболочки! Я познакомлю вас с несколькими вещами, которые помогут вам писать сценарии в кратчайшие сроки!

    Основы

    Создание исполняемого файла

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

    cd в тестовую директорию и запустим

     # создадим новый файл с именем `script.sh`
    сенсорный script.sh
    # добавляем к сценарию разрешение `выполнение`, чтобы сделать его исполняемым
    chmod +x script.sh
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

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

     ./script
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    ./ необходимо, чтобы ваш терминал искал в текущем каталоге, а не в каталоге сценария по умолчанию.

    теперь откройте этот файл в вашем любимом редакторе и приступим к изучению синтаксиса.

    Шебанг!

    TL;DR; добавить #!/usr/bin/env bash в первой строке вашего файла сценария, чтобы пометить этот файл как исполняемый файл bash.

    вы могли бы использовать #!/usr/bin/env sh для переносимости, но здесь мы работаем конкретно с bash.

    полиграфия

    для печати на терминале, вы можете использовать echo или printf

    echo просто, он "отображает" то, что вы ему бросаете:

    например, давайте сделаем это script.sh , сверху напечатайте "hello world"

     #!/usr/bin/env bash
    эхо привет мир
     
    Войдите в полноэкранный режимВыйдите из полноэкранного режима

    запустите его: ./script.sh и он напечатает: hello world .

    printf используется для печати и «форматирования» строк, отсюда f в конце. несколько простых примеров можно найти здесь
    Самый большой вариант использования для меня — печать новой строки с использованием спецификатора новой строки \n .

    пример:

     #!/usr/bin/env bash
    printf "привет\nмир\n"
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    печатает:

     привет
    Мир
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Комментарии

    Любая строка, начинающаяся с # , является комментарием.

    Объявление переменных

    простой:

     MY_VARIABLE="моё значение"
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    ВАЖНО: без пробела до и после = . Shell использует пробел в качестве разделителя аргументов команды.

    Расширение параметра

    см. это и это, чтобы узнать больше.

    ссылается на или заменяет переменную:

    например:

     #!/usr/bin/env bash
    FAV_FRUIT="яблоки"
    эхо FAV_FRUIT
    # печатает `FAV_FRUIT`
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    while:

     #!/usr/bin/env bash
    FAV_FRUIT="яблоки"
    эхо $FAV_FRUIT
    # печатает `яблоки`
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Вы уловили разницу? да! FAV_FRUIT против $FAV_FRUIT .

    вы также можете использовать $ в строке:

     #!/usr/bin/env bash
    FAV_FRUIT="яблоки"
    I_LIKE_BLANK="Мне нравится $FAV_FRUIT"
    эхо $I_LIKE_BLANK
    # печатает `Я люблю яблоки`
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Примечание: во всех приведенных выше примерах вы можете заменить $ на $ {имя переменной} для того же эффекта. так $FAV_FRUIT совпадает с ${FAV_FRUIT}

    Второе примечание: обратите внимание, как мы использовали $FAV_FRUIT внутри строки? это строковые шаблоны для тебя!

    Использование значения по умолчанию

    Если переменная пуста или не определена, используйте определенное значение по умолчанию. Лучше всего это проиллюстрировать на примере:

     #!/usr/bin/env bash
    РУБАШКА_ЦВЕТ=""
    ЦВЕТ="${РУБАШКА_ЦВЕТ:-красный}"
    эхо $цвет
    # печатает: `красный`, так как SHIRT_COLOR пуст
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    другой пример:

     #!/usr/bin/env bash
    DEFAULT_COLOR="красный"
    РУБАШКА_ЦВЕТ=""
    MY_SHIRT_COLOR="Цвет моей рубашки ${SHIRT_COLOR:-$DEFAULT_COLOR}"
    эхо $MY_SHIRT_COLOR
    # печатает: `Цвет моей рубашки красный`
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Примечание: обратите внимание, как мы использовали ${SHIRT_COLOR:-$DEFAULT_COLOR} внутри строки? это строковые шаблоны для тебя!

    Передача переменных в наш скрипт из терминала

    Чтобы передать переменную, вы можете объявить ее перед запуском скрипта.
    Это особенно полезно для передачи переменных среды. Например: следующий скрипт ожидает FRUIT и напечатает I Like . Если FRUIT не определено, используйте Apricot .

     #!/usr/bin/env bash
    DEFAULT_FRUIT="Абрикос"
    ФРУКТЫ=${ФРУКТЫ:-$DEFAULT_FRUIT}
    echo "Мне нравится $FRUIT"
     
    Войдите в полноэкранный режимВыйдите из полноэкранного режима

    теперь вы объявляете FRUIT="апельсины" перед запуском ./script :

     FRUIT="апельсины" ./script
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    , который печатает: Я люблю апельсины

    , так как по умолчанию Абрикос :

     ./script
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    отпечатков: Я люблю абрикос

    Более продвинутые вещи

    Если операторы

    Синтаксис
    Если тогда
     if [[  ]]; затем
      <команды>
    фи
     
    Войти в полноэкранный режимВыйти из полноэкранного режима
    Если еще
     if [[  ]]; затем
      <команды>
    еще
      <другие команды>
    фи
     
    Войти в полноэкранный режимВыйти из полноэкранного режима
    Если иначе, если иначе
     if [[  ]]; затем
      <команды>
    elif [[ <какой-то тест> ]]; затем
      <разные команды>
    еще
      <другие команды>
    фи
     
    Войти в полноэкранный режимВыйти из полноэкранного режима
    Тесты

    в приведенном выше <некоторый тест> можно заменить на тестовое условие. Вы можете увидеть все доступные условия test , набрав man test в своем терминале

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

    Test Описание
    [[2 -gt 1]] 2 больше 1. аналог -lt : меньше чем.
    [[2 -eq 2]] 2 равно 2
    [[3 -ge 3]] 3 больше или равно 3. аналог -le : меньше или равно
    [[-n "привет"]] Длина приветствия больше 0
    [[-z ""]] Длина "" равна 0
    [["яблоко" = "яблоко"]] Строка "яблоко" равно строке "яблоко". ( -eq сравнивает числа, а = сравнивает символы)
    [["яблоко"!= "яблоко1"]] Строка, "яблоко" не равно Строка "яблоко1"

    Примеры использования подстановочных знаков:
    - [[ "арбуз" = *"дыня"* ]] : Строка "арбуз" содержит "дыня"

    Поскольку эта статья посвящена bash , а не оболочке в целом, мы используем двойные квадратные скобки bash [[]] . Прочитайте этот и этот ответ для получения дополнительной информации.

    эта статья является хорошим ресурсом для дальнейших тестовых условий

    Чтобы продолжить дух примеров и фруктов, вот пример:

     #!/usr/bin/env bash
    if [[ ${#FRUIT} -gt 4 ]] # Количество символов FRUIT больше 4
    затем
        echo "[$FRUIT]: ура! Ваш фрукт содержит более 4 символов!"
    elif [[ ${#FRUIT} -lt 4 ]] # Количество символов FRUIT меньше 4
    затем
        echo "[$FRUIT]: Невероятно... в вашем фрукте меньше 4 символов..."
    else # Количество символов FRUIT должно быть 4
        echo "Фрукт, содержащий ровно 4 символа, как драгоценно!"
    фи
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

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

    Команда Выход
    FRUIT="Apple" ./script.sh [Apple]: ура! ваш фрукт имеет более 4 символов!
    ФРУКТЫ="Рис" . /script.sh [Рис]: Невероятно... в вашем фрукте меньше 4 символов...
    ФРУКТЫ="Груша" ./script.sh Фрукт, содержащий ровно 4 символа, как драгоценно!

    Обратите внимание на расширение параметра ${#FRUIT} получает длину символов FRUIT

    Вот несколько полезных операторов

    Разбор аргументов (операторы

    , а и case )

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

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

     ./script --name Ahmed --height 6ft --occupation "Профессиональный прокрастинатор" --username coolestGuyEver23
     
    Войдите в полноэкранный режимВыйдите из полноэкранного режима

    , который напечатает:

     Здравствуйте, меня зовут Ахмед.  Я 6 футов ростом.
    Я работаю профессиональным прокрастинатором, и мое имя пользователя coolestGuyEver23
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Обратите внимание, что порядок аргументов не имеет значения

    приступим!

    Во-первых, нам нужен способ разобрать аргументы --name Ahmed --height 6ft --occupation= Developer --username coolestGuyEver23 в переменные. см. этот ответ SO

    , сначала давайте посмотрим на bash, встроенный в $# и shift
    $# , который возвращает количество переданных аргументов. например:

     #!/usr/bin/env bash
    эхо $ #
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Если вы запустите ./script arg1 arg2 arg3 , вывод будет 3

    сдвиг

    Команда shift — это одна из встроенных функций оболочки Bourne, поставляемых с Bash. Эта команда принимает один аргумент, число. Позиционные параметры сдвигаются влево на это число, N. Позиционные параметры от N+1 до $# переименовываются в имена переменных от $1 до $# - N+1.

    Это лучше объяснить на примере:

     #!/usr/bin/env bash
    эхо $ #
    смена 2
    эхо $ #
    сдвиг
    эхо $ #
    эхо $@
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Работает ./script arg1 arg2 arg3 arg4 arg5 (всего 5 аргументов) печатает:

     5
    3
    2
    аргумент4 аргумент5
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    да? поэтому shift 2 в основном удалил arg1 и arg2 , затем мы снова выполнили shift и удалили arg3 . Обратите внимание, что $@ — это еще одна встроенная функция, которая печатает аргументы.

    Сейчас самое время рассказать вам, как получить доступ к аргументам вроде массива. Вы можете использовать $1 для первого аргумента, $2 для второго аргумента, $3 для третьего аргумента и так далее.

    пример:

     #!/usr/bin/env bash
    эхо $1
    эхо $3
    эхо $2
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    выполняется:

     ./script arg1 arg2 arg3
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    отпечатков:

     arg1
    arg3
    аргумент2
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Как нам использовать всю эту информацию? взгляните на это:

     while [[ $# -gt 0 ]]; делать
        ключ = "$1"
        эхо $ключ
        сдвиг
    Выполнено
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Возможно, это уже щелкнуло! Используя описанный выше цикл while , с условием выхода [[ $# -gt 0 ]] и shift для уменьшения $# , мы можем перебрать все переданные аргументы!

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

     #!/usr/bin/env bash
    пока [[ $# -gt 0 ]]
    делать
    ключ = "$1"
    case $введите
        # разбор имени arg
        -n|--имя)
            NAME="$2" # значение сразу после ключа
            shift # прошлый аргумент (`--name`)
            сдвиг # прошлое значение
        ;;
        # аргумент высоты синтаксического анализа
        -h|--высота)
           
            сдвиг # прошлый аргумент
            сдвиг # прошлое значение
        ;;
        # неизвестная опция
        *)
            echo "Неизвестный аргумент: $key"
            сдвиг # прошлый аргумент
        ;;
    эсак
    Выполнено
    эхо "ИМЯ: $ИМЯ"
    эхо "ВЫСОТА: $ВЫСОТА"
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Примечания:

    1. каждый корпус отделен трубкой | например -n|--name) соответствует -n ИЛИ --name
    2. мы использовали сдвиг два раза, чтобы пройти мимо флага аргумента и значения аргумента
    3. Подробнее о деле Заявление
    4. Мы выходим после нахождения первого совпадения с помощью ;; . Подходящие неизвестные варианты находятся внизу.

    Введите:

     ./run.sh --name Ahmed --высота 6 футов
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    или короче

     ./run.sh -n Ahmed -h 6ft
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    отпечатков:

     ИМЯ: Ахмед
    ВЫСОТА: 6 футов
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Собираем все вместе:

     #!/usr/bin/env bash
    пока [[ $# -gt 0 ]]
    делать
    ключ = "$1"
    case $введите
        # разбор имени arg
        -n|--имя)
            NAME="$2" # значение сразу после ключа
            shift # прошлый аргумент (`--name`)
            сдвиг # прошлое значение
        ;;
        # аргумент высоты синтаксического анализа
        -h|--высота)
           
            сдвиг # прошлый аргумент
            сдвиг # прошлое значение
        ;;
        # разобрать пользовательский аргумент
        -u|--пользователь)
            ПОЛЬЗОВАТЕЛЬ="$2"
            сдвиг # прошлый аргумент
            сдвиг # прошлое значение
        ;;
        # разобрать аргумент занятия
        -o|--занятие)
            ЗАНЯТИЕ="$2"
            сдвиг # прошлый аргумент
            сдвиг # прошлое значение
        ;;
        # разбор аргумента качества кода
        -u|--имя пользователя)
            ИМЯ ПОЛЬЗОВАТЕЛЯ = "$2"
            сдвиг # прошлый аргумент
            сдвиг # прошлое значение
        ;;
        # неизвестная опция
        *)
            echo "Неизвестный аргумент: $key"
            сдвиг # прошлый аргумент
        ;;
    эсак
    Выполнено
    echo "Здравствуйте, меня зовут $NAME.  Мой рост $HEIGHT.
    Я работаю как $OCCUPATION и мое имя пользователя $USERNAME"
     
    Войдите в полноэкранный режимВыйдите из полноэкранного режима

    и запустите его:

     ./run.sh --name ahmed --height 6ft --occupation "профессиональный прокрастинатор" --username coolestGuyEver23
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    или

     ./run.sh -n ahmed -h 6ft -o "профессиональный прокрастинатор" -u coolestGuyEver23
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    результат:

     Здравствуйте, меня зовут ахмед. Я 6 футов ростом.
    Я работаю профессиональным прокрастинатором, и мой никнейм самый крутойGuyEver23.
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

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

    Оценка команд

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

     mvn чистая установка -PautoInstallPackage -Dcrx.user=user1 -Dcrx.password=pass1
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Мы можем разобрать и собрать это:

    Предполагая, что я уже проанализировал ПРОФИЛЬ , ПОЛЬЗОВАТЕЛЬ и ПАРОЛЬ

     ПРОФИЛЬ = "${ПРОФИЛЬ:-autoInstallPackage}"
    ПОЛЬЗОВАТЕЛЬ="${ПОЛЬЗОВАТЕЛЬ:-user1}"
    ПАРОЛЬ="${ПАРОЛЬ:-pass1}"
    COMMAND="mvn clean install -P$PROFILE -Dcrx.user=$USER -Dcrx.password=$PASSWORD"
    оценка $ КОМАНДА
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    и команда будет выполнена.

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

    Приведенный выше сценарий можно переписать без eval как:

     PROFILE="${PROFILE:-autoInstallPackage}"
    ПОЛЬЗОВАТЕЛЬ="${ПОЛЬЗОВАТЕЛЬ:-user1}"
    ПАРОЛЬ="${ПАРОЛЬ:-pass1}"
    mvn clean install "-P$PROFILE" "-Dcrx.user=$USER" "-Dcrx.password=$PASSWORD"
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Спасибо @lietux

    Функции

    Функции просты и понятны. Вот функция, которая выводит первый переданный ей аргумент:

     #!/usr/bin/env bash
    печататьПервыйТолько(){
      эхо $1
    }
    # выполнить его
    printFirstOnly привет мир
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    печатает привет только

    Доступ к аргументам функции осуществляется с помощью $N , где N — номер аргумента.

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

     pretty() {
      printf "***\n$1\n***\n"
    }
    довольно "привет"
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    отпечатков:

     ***
    всем привет
    ***
     
    Войти в полноэкранный режимВыйти из полноэкранного режима

    Однако вы можете использовать его для любых целей.

Добавить комментарий

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