Написание скриптов: Учимся писать userscript’ы / Хабр
как написать JavaScript — руководства на Skillbox
Если бы для интернета писали Библию, она начиналась бы так:
Сначала была почта. И увидели инженеры, что это хорошо. И создали они WWW с гиперссылками. И увидели инженеры, что это тоже хорошо. И создали они тогда язык JavaScript для оживления страничек.
Примерно так происходило в реальности. JavaScript придумали, чтобы «оживить» HTML. Скрипты JavaScript пишутся непосредственно в текст HTML или хранятся в отдельных файлах, как и стили CSS. Они выполняются сразу после загрузки страницы в браузер.
Даже сам язык в первое время назывался LiveScript. Потом его переименовали в JavaScript, потому что планировали как-то увязать с языком общего назначения Java. Но сейчас у них нет практически ничего общего, а JavaScript — совершенно независимый язык программирования со своей четкой спецификацией ECMAScript.
Формально JavaScript является торговой маркой Oracle, а этот язык — «расширение» ECMAScript, наряду с JScript от Microsoft и ActionScript, но это скорее заморочки владельцев торговых марок. Главное, что свободный ECMAScript никому не принадлежит.
Со временем сфера влияния JavaScript значительно расширилась. Его начали использовать не только для скриптов на странице HTML, но и для серьезных больших веб-приложений и целых программ, которые работают в браузере. Есть инструменты, чтобы специальным образом «упаковать» эти программы и выполнять их отдельно от браузера. Это компиляторы и интерпретаторы, которые более подробно рассматриваются на обучающих курсах «Java-разработчик» и «Веб-разработчик».
Приложения JavaScript выполняются в любой среде, где есть соответствующий интерпретатор.
Нас пока интересуют только браузеры и HTML-странички.
Как сделать JavaScript? Написать элементарный скрипт не сложнее, чем простую HTML-страничку, ведь скрипты JavaScript пишутся обычным текстом, то есть их можно создавать буквально в том же «Блокноте», сохраняя потом в отдельных файлах или вставляя в тело HTML-документа. Самые простые вещи на JavaScript делаются действительно просто.
Для примера сделаем простой скрипт для выполнения сервером сценариев Windows. Этот скрипт можно написать прямо в «Блокноте» и выполнить без браузера.
WScript.echo («Привет, Skillbox!«)
Пишем этот текст в «Блокноте», затем сохраняем файл под именем skillbox.js и запускаем в «Проводнике» Windows.
Аналогичный скрипт можно записать прямо в коде страницы HTML между тегами <script> и </script>. Там уже можно использовать обычные методы JavaScript, а не метод echo специфического объекта WScript. Рассмотрим некоторые из стандартных методов для ввода и вывода данных в браузере.
Метод alert() отображает окошко с кнопкой «OK». В окне выводится сообщение, которое указано в скобках. Например, «Привет, Skillbox!». То есть в данном случае браузер делает ровно то же самое, что перед этим делал сервер сценариев Windows.
Эти примеры тоже можно писать в «Блокноте», только сохранять в файлах с расширением HTML. Например, skillbox.htm.
<html>
<script>
alert(«Привет, Skillbox«)
</script>
</html>
Результат:
В качестве аргумента alert() можно указать не только конкретный текст, но и результат каких-либо вычислений или обработки других данных. Например, alert(x), где x вычисляется отдельно.
Метод confirm() выводит такое же окно с сообщением, но уже с двумя кнопками — «ОК» и «Отмена». В зависимости от того, какую кнопку щелкнет пользователь, метод возвращает либо значение true, либо false. Сервер получает это возвращаемое значение от пользователя и выполняет какое-то действие, в зависимости от ответа.
Синтаксис такой же, только здесь логически предполагается выбор, так что пользователю задают вопрос.
<html>
<script>
confirm(«Привет, Skillbox«)
</script>
</html>
Результат:
Метод prompt() выводит диалоговое окно с сообщением и текстовым полем, куда пользователь вводит данные. Здесь тоже предусмотрены две кнопки «ОК» и «Отмена». По нажатию первой кнопки метод возвращает на сервер введенный текст, а по нажатию второй кнопки возвращает логическое значение false.
Синтаксис здесь такой:
prompt (сообщение, значение_поля_ввода_данных)
Значение поля ввода необязательно. Туда можно вписать текст, который изначально введен в поле для удобства пользователя.
Код:
<html>
<script>
prompt(«Передай привет Skillbox«, «Привет«)
</script>
</html>
Результат:
Возможности современного JavaScript выходят далеко за рамки примитивного ввода-вывода данных через формы. Эти методы мы привели только в качестве самых простых примеров. Кроме этого, JavaScript позволяет реагировать на действия пользователя. Например, на движения мышкой или нажатие определенных клавиш. JavaScript часто используется для обеспечения асинхронной работы (Технология AJAX), когда информация на странице обновляется без ее перезагрузки. В этом режиме данные отправляются на сервер и загружаются оттуда в интерактивном режиме. Кроме того, JavaScript способен манипулировать с HTML-элементами на странице (создавать и прятать теги и т.д.) и делать многое другое.
Во всех популярных браузерах есть специальная консоль разработчика. Она показывает код скриптов на странице, а также выводит другую полезную информацию. В Chrome, Firefox и IE консоль разработчика открывается по нажатию горячей клавиши F12, в Safari — Ctrl+Shift+I или Ctrl+Alt+C. На скриншоте скрипты отображаются справа вверху, вместе с другими элементами веб-страницы.
Консоль разработчика в Chrome.
В дальнейшем для удобного программирования понадобится установить редактор кода или IDE (Integrated Development Environment), интегрированную среду разработки. IDE — это редактор с расширенной функциональностью, который интегрирован с другими полезными инструментами, поддерживает подключение дополнительных модулей и так далее.
Для начала можно рекомендовать один из легких редакторов:
В будущем есть смысл присмотреться к IDE:
Инструкторы на курсе «JavaScript с нуля» посоветуют лучшие инструменты и помогут разобраться с любыми вопросами. Это практический 4-месячный курс для тех, кто хочет научиться основам языка сценариев с индивидуальным наставником, разработать фронтенд для интерактивного веб-проекта и положить кейс к себе в портфолио.
Курс идеально подойдет дизайнерам-разработчикам и начинающим программистам, кто уже знаком и умеет разрабатывать страницу на HTML и CSS, но не намерен останавливаться в изучении программирования. Преподаватели практически «на пальцах» объяснят базовые основы синтаксиса JavaScript, научат создавать визуальные интерактивные элементы и помогут разработать первый веб-проект на JavaScript.
Курс «JavaScript с нуля»
Практический 4-х месячный курс для тех, кто хочет научиться основам языка сценариев с индивидуальным наставником, разработать фронтэнд для интерактивного веб-проекта и положить кейс к себе в портфолио.
- Живая обратная связь с преподавателями
- Неограниченный доступ к материалам курса
- Стажировка в компаниях-партнёрах
- Дипломный проект от реального заказчика
- Гарантия трудоустройства в компании-партнёры для выпускников, защитивших дипломные работы
начало / Блог компании RUVDS.com / Хабр
Bash-скрипты: начало
Bash-скрипты, часть 2: циклы
Bash-скрипты, часть 3: параметры и ключи командной строки
Bash-скрипты, часть 4: ввод и вывод
Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
Bash-скрипты, часть 6: функции и разработка библиотек
Bash-скрипты, часть 7: sed и обработка текстов
Bash-скрипты, часть 8: язык обработки данных awk
Bash-скрипты, часть 9: регулярные выражения
Bash-скрипты, часть 10: практические примеры
Bash-скрипты, часть 11: expect и автоматизация интерактивных утилит
Сегодня поговорим о bash-скриптах. Это — сценарии командной строки, написанные для оболочки bash. Существуют и другие оболочки, например — zsh, tcsh, ksh, но мы сосредоточимся на bash. Этот материал предназначен для всех желающих, единственное условие — умение работать в командной строке Linux.
Сценарии командной строки — это наборы тех же самых команд, которые можно вводить с клавиатуры, собранные в файлы и объединённые некоей общей целью. При этом результаты работы команд могут представлять либо самостоятельную ценность, либо служить входными данными для других команд. Сценарии — это мощный способ автоматизации часто выполняемых действий.
Итак, если говорить о командной строке, она позволяет выполнить несколько команд за один раз, введя их через точку с запятой:
pwd ; whoami
На самом деле, если вы опробовали это в своём терминале, ваш первый bash-скрипт, в котором задействованы две команды, уже написан. Работает он так. Сначала команда pwd
выводит на экран сведения о текущей рабочей директории, потом команда whoami
показывает данные о пользователе, под которым вы вошли в систему.
Используя подобный подход, вы можете совмещать сколько угодно команд в одной строке, ограничение — лишь в максимальном количестве аргументов, которое можно передать программе. Определить это ограничение можно с помощью такой команды:
getconf ARG_MAX
Командная строка — отличный инструмент, но команды в неё приходится вводить каждый раз, когда в них возникает необходимость. Что если записать набор команд в файл и просто вызывать этот файл для их выполнения? Собственно говоря, тот файл, о котором мы говорим, и называется сценарием командной строки.
Как устроены bash-скрипты
Создайте пустой файл с использованием команды touch
. В его первой строке нужно указать, какую именно оболочку мы собираемся использовать. Нас интересует bash
, поэтому первая строка файла будет такой:
#!/bin/bash
В других строках этого файла символ решётки используется для обозначения комментариев, которые оболочка не обрабатывает. Однако, первая строка — это особый случай, здесь решётка, за которой следует восклицательный знак (эту последовательность называют шебанг) и путь к bash
, указывают системе на то, что сценарий создан именно для bash
.
Команды оболочки отделяются знаком перевода строки, комментарии выделяют знаком решётки. Вот как это выглядит:
#!/bin/bash
# This is a comment
pwd
whoami
Тут, так же, как и в командной строке, можно записывать команды в одной строке, разделяя точкой с запятой. Однако, если писать команды на разных строках, файл легче читать. В любом случае оболочка их обработает.
Установка разрешений для файла сценария
Сохраните файл, дав ему имя myscript
, и работа по созданию bash-скрипта почти закончена. Сейчас осталось лишь сделать этот файл исполняемым, иначе, попытавшись его запустить, вы столкнётесь с ошибкой Permission denied
.
Попытка запуска файла сценария с неправильно настроенными разрешениями
Сделаем файл исполняемым:
chmod +x ./myscript
Теперь попытаемся его выполнить:
./myscript
После настройки разрешений всё работает как надо.
Успешный запуск bash-скрипта
Вывод сообщений
Для вывода текста в консоль Linux применяется команда echo
. Воспользуемся знанием этого факта и отредактируем наш скрипт, добавив пояснения к данным, которые выводят уже имеющиеся в нём команды:
#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami
Вот что получится после запуска обновлённого скрипта.
Вывод сообщений из скрипта
Теперь мы можем выводить поясняющие надписи, используя команду echo
. Если вы не знаете, как отредактировать файл, пользуясь средствами Linux, или раньше не встречались с командой echo
, взгляните на этот материал.
Использование переменных
Переменные позволяют хранить в файле сценария информацию, например — результаты работы команд для использования их другими командами.
Нет ничего плохого в исполнении отдельных команд без хранения результатов их работы, но возможности такого подхода весьма ограничены.
Существуют два типа переменных, которые можно использовать в bash-скриптах:
- Переменные среды
- Пользовательские переменные
Переменные среды
Иногда в командах оболочки нужно работать с некими системными данными. Вот, например, как вывести домашнюю директорию текущего пользователя:
#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"
Обратите внимание на то, что мы можем использовать системную переменную $HOME
в двойных кавычках, это не помешает системе её распознать. Вот что получится, если выполнить вышеприведённый сценарий.
Использование переменной среды в сценарии
А что если надо вывести на экран значок доллара? Попробуем так:
echo "I have $1 in my pocket"
Система обнаружит знак доллара в строке, ограниченной кавычками, и решит, что мы сослались на переменную. Скрипт попытается вывести на экран значение неопределённой переменной $1
. Это не то, что нам нужно. Что делать?
В подобной ситуации поможет использование управляющего символа, обратной косой черты, перед знаком доллара:
echo "I have \$1 in my pocket"
Теперь сценарий выведет именно то, что ожидается.
Использование управляющей последовательности для вывода знака доллара
Пользовательские переменные
В дополнение к переменным среды, bash-скрипты позволяют задавать и использовать в сценарии собственные переменные. Подобные переменные хранят значение до тех пор, пока не завершится выполнение сценария.
Как и в случае с системными переменными, к пользовательским переменным можно обращаться, используя знак доллара:
TNW-CUS-FMP — промо-код на 10% скидку на наши услуги, доступен для активации в течение 7 дней
#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"
Вот что получится после запуска такого сценария.
Пользовательские переменные в сценарии
Подстановка команд
Одна из самых полезных возможностей bash-скриптов — это возможность извлекать информацию из вывода команд и назначать её переменным, что позволяет использовать эту информацию где угодно в файле сценария.
Сделать это можно двумя способами.
- С помощью значка обратного апострофа «`»
- С помощью конструкции
$()
Используя первый подход, проследите за тем, чтобы вместо обратного апострофа не ввести одиночную кавычку. Команду нужно заключить в два таких значка:
mydir=`pwd`
При втором подходе то же самое записывают так:
mydir=$(pwd)
А скрипт, в итоге, может выглядеть так:
#!/bin/bash
mydir=$(pwd)
echo $mydir
В ходе его работы вывод команды pwd
будет сохранён в переменной mydir
, содержимое которой, с помощью команды echo
, попадёт в консоль.
Скрипт, сохраняющий результаты работы команды в переменной
Математические операции
Для выполнения математических операций в файле скрипта можно использовать конструкцию вида $((a+b))
:
#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2
Математические операции в сценарии
Управляющая конструкция if-then
В некоторых сценариях требуется управлять потоком исполнения команд. Например, если некое значение больше пяти, нужно выполнить одно действие, в противном случае — другое. Подобное применимо в очень многих ситуациях, и здесь нам поможет управляющая конструкция if-then
. В наиболее простом виде она выглядит так:
if команда
then
команды
fi
А вот рабочий пример:
#!/bin/bash
if pwd
then
echo "It works"
fi
В данном случае, если выполнение команды pwd
завершится успешно, в консоль будет выведен текст «it works».
Воспользуемся имеющимися у нас знаниями и напишем более сложный сценарий. Скажем, надо найти некоего пользователя в /etc/passwd
, и если найти его удалось, сообщить о том, что он существует.
#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi
Вот что получается после запуска этого скрипта.
Поиск пользователя
Здесь мы воспользовались командой grep
для поиска пользователя в файле /etc/passwd
. Если команда grep
вам незнакома, её описание можно найти здесь.
В этом примере, если пользователь найден, скрипт выведет соответствующее сообщение. А если найти пользователя не удалось? В данном случае скрипт просто завершит выполнение, ничего нам не сообщив. Хотелось бы, чтобы он сказал нам и об этом, поэтому усовершенствуем код.
Управляющая конструкция if-then-else
Для того, чтобы программа смогла сообщить и о результатах успешного поиска, и о неудаче, воспользуемся конструкцией if-then-else
. Вот как она устроена:
if команда
then
команды
else
команды
fi
Если первая команда возвратит ноль, что означает её успешное выполнение, условие окажется истинным и выполнение не пойдёт по ветке else
. В противном случае, если будет возвращено что-то, отличающееся от нуля, что будет означать неудачу, или ложный результат, будут выполнены команды, расположенные после else
.
Напишем такой скрипт:
#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi
Его исполнение пошло по ветке else
.
Запуск скрипта с конструкцией if-then-else
Ну что же, продолжаем двигаться дальше и зададимся вопросом о более сложных условиях. Что если надо проверить не одно условие, а несколько? Например, если нужный пользователь найден, надо вывести одно сообщение, если выполняется ещё какое-то условие — ещё одно сообщение, и так далее. В подобной ситуации нам помогут вложенные условия. Выглядит это так:
if команда1
then
команды
elif команда2
then
команды
fi
Если первая команда вернёт ноль, что говорит о её успешном выполнении, выполнятся команды в первом блоке then
, иначе, если первое условие окажется ложным, и если вторая команда вернёт ноль, выполнится второй блок кода.
#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi
В подобном скрипте можно, например, создавать нового пользователя с помощью команды useradd
, если поиск не дал результатов, или делать ещё что-нибудь полезное.
Сравнение чисел
В скриптах можно сравнивать числовые значения. Ниже приведён список соответствующих команд.
n1 -eq n2
Возвращает истинное значение, еслиn1
равноn2
.n1 -ge n2
Возвращает истинное значение, еслиn1
больше или равноn2
.n1 -gt n2
Возвращает истинное значение, еслиn1
большеn2
.n1 -le n2
Возвращает истинное значение, еслиn1
меньше или равноn2
.n1 -lt n2
Возвращает истинное значение, если n1 меньшеn2
.n1 -ne n2
Возвращает истинное значение, еслиn1
не равноn2
.
В качестве примера опробуем один из операторов сравнения. Обратите внимание на то, что выражение заключено в квадратные скобки.
#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi
Вот что выведет эта команда.
Сравнение чисел в скриптах
Значение переменной val1
больше чем 5, в итоге выполняется ветвь then
оператора сравнения и в консоль выводится соответствующее сообщение.
Сравнение строк
В сценариях можно сравнивать и строковые значения. Операторы сравнения выглядят довольно просто, однако у операций сравнения строк есть определённые особенности, которых мы коснёмся ниже. Вот список операторов.
str1 = str2
Проверяет строки на равенство, возвращает истину, если строки идентичны.
str1 != str2
Возвращает истину, если строки не идентичны.str1 < str2
Возвращает истину, еслиstr1
меньше, чемstr2
.str1 > str2
Возвращает истину, еслиstr1
больше, чемstr2
.-n str1
Возвращает истину, если длинаstr1
больше нуля.-z str1
Возвращает истину, если длинаstr1
равна нулю.
Вот пример сравнения строк в сценарии:
#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user is the current logged in user"
fi
В результате выполнения скрипта получим следующее.
Сравнение строк в скриптах
Вот одна особенность сравнения строк, о которой стоит упомянуть. А именно, операторы «>» и «<» необходимо экранировать с помощью обратной косой черты, иначе скрипт будет работать неправильно, хотя сообщений об ошибках и не появится. Скрипт интерпретирует знак «>» как команду перенаправления вывода.
Вот как работа с этими операторами выглядит в коде:
#!/bin/bash
val1=text
val2="another text"
if [ $val1 \> $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi
Вот результаты работы скрипта.
Сравнение строк, выведенное предупреждение
Обратите внимание на то, что скрипт, хотя и выполняется, выдаёт предупреждение:
./myscript: line 5: [: too many arguments
Для того, чтобы избавиться от этого предупреждения, заключим $val2
в двойные кавычки:
#!/bin/bash
val1=text
val2="another text"
if [ $val1 \> "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi
Теперь всё работает как надо.
Сравнение строк
Ещё одна особенность операторов «>» и «<» заключается в том, как они работают с символами в верхнем и нижнем регистрах. Для того, чтобы понять эту особенность, подготовим текстовый файл с таким содержимым:
Likegeeks
likegeeks
Сохраним его, дав имя myfile
, после чего выполним в терминале такую команду:
sort myfile
Она отсортирует строки из файла так:
likegeeks
Likegeeks
Команда sort
, по умолчанию, сортирует строки по возрастанию, то есть строчная буква в нашем примере меньше прописной. Теперь подготовим скрипт, который будет сравнивать те же строки:
#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 \> $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi
Если его запустить, окажется, что всё наоборот — строчная буква теперь больше прописной.
Команда sort и сравнение строк в файле сценария
В командах сравнения прописные буквы меньше строчных. Сравнение строк здесь выполняется путём сравнения ASCII-кодов символов, порядок сортировки, таким образом, зависит от кодов символов.
Команда sort
, в свою очередь, использует порядок сортировки, заданный в настройках системного языка.
Проверки файлов
Пожалуй, нижеприведённые команды используются в bash-скриптах чаще всего. Они позволяют проверять различные условия, касающиеся файлов. Вот список этих команд.
-d file
Проверяет, существует ли файл, и является ли он директорией.-e file
Проверяет, существует ли файл.-f file
Проверяет, существует ли файл, и является ли он файлом.-r file
Проверяет, существует ли файл, и доступен ли он для чтения.-s file П
роверяет, существует ли файл, и не является ли он пустым.-w file
Проверяет, существует ли файл, и доступен ли он для записи.-x file
Проверяет, существует ли файл, и является ли он исполняемым.file1 -nt file2
Проверяет, новее лиfile1
, чемfile2
.file1 -ot file2
Проверяет, старше лиfile1
, чемfile2
.-O file
Проверяет, существует ли файл, и является ли его владельцем текущий пользователь.-G file
Проверяет, существует ли файл, и соответствует ли его идентификатор группы идентификатору группы текущего пользователя.
Эти команды, как впрочем, и многие другие рассмотренные сегодня, несложно запомнить. Их имена, являясь сокращениями от различных слов, прямо указывают на выполняемые ими проверки.
Опробуем одну из команд на практике:
#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi
Этот скрипт, для существующей директории, выведет её содержимое.
Вывод содержимого директории
Полагаем, с остальными командами вы сможете поэкспериментировать самостоятельно, все они применяются по тому же принципу.
Итоги
Сегодня мы рассказали о том, как приступить к написанию bash-скриптов и рассмотрели некоторые базовые вещи. На самом деле, тема bash-программирования огромна. Эта статья является переводом первой части большой серии из 11 материалов. Если вы хотите продолжения прямо сейчас — вот список оригиналов этих материалов. Для удобства сюда включён и тот, перевод которого вы только что прочли.
- Bash Script Step By Step — здесь речь идёт о том, как начать создание bash-скриптов, рассмотрено использование переменных, описаны условные конструкции, вычисления, сравнения чисел, строк, выяснение сведений о файлах.
- Bash Scripting Part 2, Bash the awesome — тут раскрываются особенности работы с циклами for и while.
- Bash Scripting Part 3, Parameters & options — этот материал посвящён параметрам командной строки и ключам, которые можно передавать скриптам, работе с данными, которые вводит пользователь, и которые можно читать из файлов.
- Bash Scripting Part 4, Input & Output — здесь речь идёт о дескрипторах файлов и о работе с ними, о потоках ввода, вывода, ошибок, о перенаправлении вывода.
- Bash Scripting Part 5, Sighals & Jobs — этот материал посвящён сигналам Linux, их обработке в скриптах, запуску сценариев по расписанию.
- Bash Scripting Part 6, Functions — тут можно узнать о создании и использовании функций в скриптах, о разработке библиотек.
- Bash Scripting Part 7, Using sed — эта статья посвящена работе с потоковым текстовым редактором sed.
- Bash Scripting Part 8, Using awk — данный материал посвящён программированию на языке обработки данных awk.
- Bash Scripting Part 9, Regular Expressions — тут можно почитать об использовании регулярных выражений в bash-скриптах.
- Bash Scripting Part 10, Practical Examples — здесь приведены приёмы работы с сообщениями, которые можно отправлять пользователям, а так же методика мониторинга диска.
- Bash Scripting Part 11, Expect Command — этот материал посвящён средству Expect, с помощью которого можно автоматизировать взаимодействие с интерактивными утилитами. В частности, здесь идёт речь об expect-скриптах и об их взаимодействии с bash-скриптами и другими программами.
Полагаем, одно из ценных свойств этой серии статей заключается в том, что она, начинаясь с самого простого, подходящего для пользователей любого уровня, постепенно ведёт к довольно серьёзным темам, давая шанс всем желающим продвинуться в деле создания сценариев командной строки Linux.
Уважаемые читатели! Просим гуру bash-программирования рассказать о том, как они добрались до вершин мастерства, поделиться секретами, а от тех, кто только что написал свой первый скрипт, ждём впечатлений.
Теория правильных скриптов / Хабр
Чем различается скрипт и программа? Вовсе не используемым языком или наличием интерфейса.
Главная разница — в наличии у программы обширнейшей оболочки, не связанной «содержимым» программы. В зависимости от платформы, это могут быть страницы руководства, поддержка нескольких языков, наличие функционала по установке/удалению, исполнение соглашений об интерфейсе (командной строки, или иных средств взаимодействия), интерфейсы в общем реестре и т.д… Программа должна уметь работать в любой документированной среде, предусматривать различные ситуации (круче всего с этим у программ под unix, которые используют ./configure для определения, собственно, где они, что можно, а что нельзя на этой (очередной) платформе).
Скрипт же, в строго обратном смысле: он предназначен для решения конкретной проблемы «здесь и сейчас». Никто не ожидает от скрипта, который отсылает статистику, способности делать это одновременно на solaris’е, freeBSD и windows embedded standard с cygwin’ом на борту.
По математико-программистким представлениям, между скриптами администрирования и программами нет разницы. Они работают по одинаковым принципам, вообще говоря, выполняют почти одно и то же.
Разница между скриптом и программой — административная.
Практически любая программа имеет в себе ТРИ важные составляющие:
- Нетривиальный алгоритм.
- Техподдержку, наработанные лучшие практики использования, типовые схемы внедрения и готовые конфигурации.
- Правильную интеграцию в рабочую среду в любой разрешённой (документированной) конфигурации.
Давайте подробнее об этих составляющих…
1) Алгоритм. У любой программы есть во-первых некая идея (что, собственно, делает программа), во-вторых — обвязка. Чтение конфигов, вывод в сислог, оповещение по почте и ещё тысяча не связанных с основной задачей операций. Но программу используют не ради чтения конфигов и записи в лог, а ради того, что она ДЕЛАЕТ. Соответственно, обычно идея заключается в выполнении каких-то действий по какому-то алгоритму. Нетривиальная идея. В фактическом коде это может быть меньше, чем чтение xml-конфига, но при этом именно рабочий алгоритм — суть программы. Он может быть или «обрабатывающим данные» (вроде SQL’я), или математическим (вроде md5sum), или работающим с конкретными особенностями конкретной железки (формата файла) — но он всегда требует высокой квалификации в предметной области для адекватного понимания принципов работы. Понятно, что код OpenSSL может читать любой программист. Понятно, что алгоритм работы OpenSSL может понять только хороший математик.
Но мы пишем не о программах — о скриптах. Так вот, скрипт не должен реализовывать нетривиальные алгоритмы. Если вы у себя в скрипте пишите аналог base64 — это плохой скрипт. Если вы у себя в скрипте пишите отправку сообщений по smtp методом «открыли сокет, записали» — это омерзительный скрипт. Если вы у себя в скрипте ловите данные с ком-порта и пишите туда ответ (для управления УПСом) — это писец какой-то, а не скрипт.
Скрипт НЕ ДОЛЖЕН содержать в себе алгоритма в терминах «предметной области». У скрипта нет предметной области, скрипт — обвязка вокруг программ, которые уже работают с предметными областями. В некоторых случаях скриптовый язык может предоставлять весь инструментарий:
if md5.md5sum (open.($check).read() ) != url.openurl($control).read(): smtp.sendmail($from, $to, "data check failed", "md5sum of $check does not match control sum form $contol.").
Это скрипт. Просто скрипт. Не смотря на то, что он реализует офигенный объём работы. А вот если у вас md5 — класс, объявленный в скрипте 5 строчками выше с имплементацией md5 (или url, или open, или smtp, etc) — это уже потуга на программу. Но программа — это много сложнее, чем алгоритм, её составляющий — и подобное не должно реализовываться в скриптах. НИКОГДА.
2) Любая программа должна обладать известным поведением. Математики предлагают описывать поведение программы в всеобъемлющих терминах; практика же говорит, что обычно кроме алгоритма программа ещё содержит баги и фичи, которые влияют на её поведение, к которым надо адаптироваться. Адаптироваться к ним куда проще, когда есть некоторая практика использования программы.
«KDC has been valid once but invalid now» — если это сообщение от скрипта — всё, хоронить. Прямо тут, на месте. У программы это вполне разумное сообщение по которому можно гуглить и выяснять, что именно не так. Это прямое следствие наличия в программе некой предметной логики, специфичной и требующей от пользователей не изучать её насквозь, а принять бехивиористически. То бишь как набор утверждений о поведении программы. «Данная версия программы не понимает файлы больше 2Гб в размере». Это не укладывается в алгоритм (а если уложится — будет занимать этак с том дискретной математики) — но это нужно знать в практическом смысле. «Данная программа плохо себя ведёт в условиях симметричной нагрузки на аплоад/даунлоад, лучше запустить две копии, каждая из которых будет работать в свою сторону симметрично» — понимание _ПОЧЕМУ_ потребует титанических усилий, проще принять это как данность. Чем сложнее алгоритм, тем больше жизни нужно потратить на его исследование, адаптацию и глубокое изучение. На всё жизни не хватит, значит, проще принять как данное и сконцентрироваться на важном.
Скрипт же, обратно, должен быть кристально понятен каждому, кто его посмотрит (с поправками на знание скриптового языка). Никаких (if every in self.__datarange__ is not in any map(__systable__.lang, __localtable__.map, lambda (a,b):[a in b or b in a for every __sys__.pair(a,b)])) raise "Missed i18n constitution".
3) Скрипт решает задачу _ЗДЕСЬ_И_СЕЙЧАС_. Программа решает задачу _ТАМ_И_ВСЕГДА_ (с поправкой на опыт эксплуатации из п.2). Когда вы пишите скрипт, вы делаете так, чтобы оно работало в вашей системе. Оно не годится для свободного использования в других системах (хотя может быть ЛЕГКО (см п.1) адаптировано). Программа должна быть адаптируема к куче вариантов применения, реализация этой адаптации в скрипте приводит к потере его простоты и превращению его, собственно, в программу. Кроме того (увы и ах), но знание КАК ПРАВИЛЬНО писать программу не эквивалентно написанию правильного алгоритма. Вы можете написать потрясающую библиотеку, но если вы не сможете запустить её на машине, у которой понедельник первый день недели (или второй — кому как повезёт), то грош цена вашей библиотеке. Необходимость думать об этом — это уже написание программ — скрипту такое допустимо (хотя и не желательно).
Ну и ещё важное отличие между скриптами и программами. Программы (в форме библиотек) могут «наслаиваться» друг на друга. Этой программе нужен libYYY, которая использует libZZZ и libAAA, при этом libAAA использует libZZZ и libc. Это нормально.
Скрипты же НЕ ДОЛЖНЫ ЗАВИСЕТЬ ДРУГ ОТ ДРУГА. Ситуация, когда скрипт зависит от сервисов другого скрипта, который зависит от третьего — ненормальная.
Заметим, речь идёт о зависимости. Вполне можно представить себе скрипт, который вызывает другие скрипты и выдаёт обобщённый результат по ним, но это уже грань. Чуть сложнее (например, «запустить скрипт А если скрипт Б не отработал») — уже за гранью фола. Нехорошо. А если скрипт А не отработал но не сообщил об этом? Или чуть-чуть отработал, но потом отвалился так, что скрипту Б не получится доделать (а мы, как авторы скрипта А, и подумать не могли о подобном)?
Что же вообще должен делать хороший скрипт? Сращивать несколько программ в конкретную систему. Можете считать программы за детали конструктора. А сам конструктор — за скрипт. Вам НЕ СЛЕДУЕТ нарезать винтовую нарезку на шпинделе — возьмите шпиндель с нарезкой. Вам не следует делать эллиптический валик из этой резинки — оно всё равно будет плохо работать. Если у вас в конструкторе нет квадратной пластинки с дырками по краям, то это проблема нехватки деталек. Вы можете попытаться сделать квадратную пластину из пары прямоугольных, но не следует делать её и сотни длинных полосок.
Бывает так, что скрипты перерождаются в программы. Внезапно в скрипте появляется некая логика (алгоритм), которая становится нетривиальна (и полезна). В этот момент нужно поймать это — и не полениться потратить в три раза больше времени, но сделать её программой. Обеспечить её «мясом», которое отличает программу от скрипта. Добавить сотню проверок условий, заменить все константы на конфигурируемые переменные, приготовить её для работы в «непривычных» условиях. Желательно сделать её публичной (тогда может наработаться практика использования).
Обычный пайп представляет из себя практически идеальный инструмент для конструирования простых программ:
lssomething | grep "bla-bla"|sendmail [email protected] -s "bla-bal for something".
Грань, в которой заканчивается скрипт найти сложно. Скажем так, цикл — ещё терпимо. Проверка условия — нормально. Но вот проверка условия в цикле (больше, чем выход из цикла) — это уже плохо. Если же у вас цикл, в котором по проверке условия запускается цикл — это 100% программа. Если у неё нет всего того, что должно быть у программы, значит это просто очень плохая программа. Но никак не скрипт.
Когда я смотрю на сборники «полезных скриптов» (вот тут (forum.sysadmins.ru), например), я понимаю, что это программы. Ужасные программы без сопроводительной документации, процедуры установки, без проверки условий… Так нельзя.
Применение подобных скриптов — признак крайней куцести рабочей среды. Я одно время пробовал с ними ужиться, но пришёл к выводу, что это ошибка. Куда правильнее иметь набор тулкитов (т.е. полноценных программ, реализующих конкретные вещи полностью и хорошо), чем набор аналогичных скриптов (повторю ещё раз — программа может быть написана на том же скриптовом языке — разница между скриптом и программой в непрограммерской обвязке: документации и приспособленности к жизни в широком спектре систем).
Применение копипастнутых скриптов — подобие ранне-досового копирования на дискетках полезных программулин. Работает — радуемся, не работает — пофигу, сломало всё — злимся. В условиях выбора между копипастнутым скриптом и программой (и минимальной обвязкой) следует выбирать программы. Даже если внедрение программы потребует дополнительных усилий по изучению, налаживанию и т.д. Наладив программу, вы получите программу. Отладив скрипт вы получите лишь костыль, прочность и долговечностью которого не знает даже автор.
Каждый раз, когда возникает подобная ситуация: делать скрипт или искать программу, следует начать с поиска программы. Потому что программирование увлекает (да нафига нам nagios, мы и сами напишем пачку скриптов мониторинга), а изучение чужого — утомляет (ну хрена она работает не так как я ожидаю?). Но последствия «недопрограммирования» — отсутствие документации к тому «дымоходу», который вы сделали. А последствие внедрённого решения — система, которая умеет работать сама по себе.
Программы для создания скриптов
IDLE
Python — один из самых популярных в мире языков программирования, который поддерживает сценарий скриптов. Он легок в освоении, имеет быструю скорость выполнения кода, а также может стать один из главных языков для написания небольших скриптов. Из-за этого мы предлагаем сначала взять во внимание этот ЯП и его стандартную интегрированную среду разработки под названием IDLE. Данный инструмент не нужно загружать отдельно, поскольку его получение происходит вместе с основными компонентами Python при их скачивании с официального веб-ресурса. Хоть эта программа, как можно понять по представленному далее скриншоту, и не имеет особенностей внешнего вида или каких-то дополнительных элементов интерфейса, она отлично подойдет для того, чтобы писать небольшие скрипты. В ней подсвечивается синтаксис, есть продвинутая система отчета об ошибках, а компилирование кода можно запустить горячей клавишей, ознакомившись с результатом в новом окне.
Что касается функциональных особенностей IDLE, то этот софт реализовывает те же стандартные действия, что и другие среды разработки, позволяя писать, запускать, сохранять код и использовать режим отладки. Отдельно стоит принять во внимание Shell — консоль для просмотра информации о выполненном коде, где и отображаются уведомления об ошибках, если они вдруг встречаются. Эта оснастка запускается в виде нового окна, где и показаны результаты обработки скрипта, а если обнаружатся какие-то ошибки, вы будете оповещены о них и быстро сможете отследить проблемную строку. Если рассматриваемая среда разработки станет вашим основным инструментом для написания скриптов, обязательно обратите внимание на огромное количество встроенных горячих клавиш, поскольку их знание позволит упростить процесс взаимодействия с софтом.
Скачать IDLE с официального сайта
PyCharm
PyCharm — продвинутая альтернатива предыдущему решению, созданная известной компанией под названием JetBrains. Разработчики постарались реализовать в своей программе те опции, которые пригодятся профессиональным разработчикам и окажут значимое влияние на комфортность взаимодействия с софтом. Самая главная из них, предназначенная для повышения удобства, — встроенный умный редактор. Как только вы начинаете набирать команду, редактор отображает возможные варианты автозаполнения, а вам остается лишь подтвердить его, нажав по клавише Enter. Это же позволяет исключить большинство опечаток или случайных ошибок еще до запуска компилирования, сэкономив тем самым время, которое могло быть затрачено на исправление в дальнейшем.
Присутствует в программе и удобная функция поиска по составляющим проекта. Это может быть файл, символ или конкретный фрагмент кода, перемещение к которому произойдет буквально в пару кликов. При написании скриптов такая возможность тоже окажется полезной, ведь иногда сценарий состоит из множества строчек кода. При первом же запуске PyCharm вам станет доступно огромное количество полезных функций для разработчиков без надобности установки дополнительных библиотек. К ним относятся: инструменты отладки, тестирования и профилирования, поддержка популярных баз данных (Oracle, SQL Server, PostgreSQL, MySQL и другие). Подходит PyCharm для выполнения любых задач на языке программирования Python, включая и веб-разработку, поскольку присутствует совместимость с HTML и JavaScript. Подводя итоги по рассмотренному софту, можно понять, что он станет отличным вариантом для постоянной работы тем юзерам, кто собирается использовать Python не только для написания скриптов, но и полноценной разработки или математических вычислений.
Скачать PyCharm с официального сайта
IntelliJ IDEA
Еще одно решение от тех же разработчиков, но уже ориентированное на работу с разными языками программирования. Из тех, которые поддерживают создание скриптов, можно отметить JavaScript, Python и Ruby, но если вы вдруг решите реализовать сложный сценарий на C++, никаких проблем с этим тоже быть не должно, однако не стоит забывать, что этот ЯП не совсем подходит для написания сценариев и лучше обратить внимание на другие методы выполнения задачи. В IntelliJ IDEA присутствует удобный инструмент компилирования, поддерживаются горячие клавиши, а найденные ошибки сразу же отображаются в консоли. Умный редактор, предлагающий дополнить вводимый код, функционирует немного иначе, чем в других средах разработки, поскольку в этом случае разработчики решили сделать алгоритм подстраиваемым под контекст, а не общие правила.
При частом выполнении конкретной операции или вызове команды, что будет актуально и для скриптов в IntelliJ IDEA, упомянутое средство заполнения предложит ее автоматизировать, чтобы больше не пришлось тратить на ввод лишние секунды. Это приложение не обошлось без недостатков, главный из которых связан со скоростью обработки кода при компилировании. Конечно, обычно скрипты состоят из небольшого количества строк, но часто они обращаются к другим программам или файлам, что при обработке может вызвать появление некоторых задержек. Создатели все еще работают над оптимизацией производительности, но пока неизвестно, когда она станет идеальной.
Скачать IntelliJ IDEA с официального сайта
Eclipse
Eclipse — одна из самых известных сред разработки, которая приглянулась большому количеству девелоперов из-за простой интеграции со свободно подключаемыми модулями. Если говорить об изначальном предназначении данной программы, то разработчики акцентировали внимание на Java, однако сейчас, установив всего несколько дополнительных библиотек, вы можете свободно программировать на любом популярном языке, включая и скриптовые. Иногда создание скриптов подразумевает подключение плагинов или отдельных модулей, которые будут задействованы при обработке кода и вызове определенных команд. В таком случае Eclipse окажется как никогда кстати как раз из-за отличной совместимости с библиотеками.
Классические функции типа подсветки синтаксиса, отображения ошибок в консоли и автозаполнения, естественно, здесь присутствуют и работают по стандартным принципам. Никаких проблем и трудностей при использовании Eclipse только для написания небольших сценариев возникнуть не должно, однако надо учесть, что при тесном взаимодействии в профессиональных целях могут появиться проблемы из-за нехватки документации и нестабильных обновлений, поскольку этот софт открыт и разработку постоянно ведут разные люди.
Скачать Eclipse
Netbeans
Следующий софт, который подойдет для использования скриптовых ЯП, называется Netbeans. Это бесплатный инструмент, поддерживающий Java, JavaScript, Python, PHP, C, C++ и другие языки программирования. Соответственно, вы сами выбираете, какой скрипт хотите написать, а среда разработки не ставит никаких ограничений в этом плане. На официальном сайте можете ознакомиться с доступными подключаемыми плагинами: большинство из них предназначены для полноценной разработки, но некоторые окажутся полезными и при создании скриптов. Привычные опции, например, быстрое редактирование кода или отображение ошибок в режиме реального времени, тоже есть в рассматриваемом софте. Поддерживается Netbeans как на Windows, так и на Linux, поэтому каждому под силу оптимизировать скрипты для выполнения в конкретных операционных системах.
Наличие огромного количества встроенных и заранее подключенных библиотек не могло не сказаться на производительности. Медленный процесс обработки особенно будет заметен, когда обращение происходит к отдельным файлам или при компилировании скрипта вызывается работой одной из программ, установленных на компьютере. Однако при взаимодействии со сценариями это редко проявляется, поскольку, как уже было сказано выше, строчек кода здесь не так много и задержки не появляются. Предлагаем перейти по ссылке ниже, чтобы попасть на официальный сайт Netbeans и ознакомиться со всеми функциональными особенностями этого софта.
Скачать Netbeans с официального сайта
RubyMine
Ruby — один из самых часто используемых языков программирования для написания скриптов, поскольку он минималистичен и крайне прост в освоении теми пользователями, кто знаком с другими ЯП, но подбирает себе вариант именно для работы с небольшими сценариями. Компания JetBrains предоставляет независимую среду разработки для этого языка, которая называется RubyMine. Однако при должном подходе и правильном освоении самого софта его можно использовать, чтобы написать код на CSS, HTML, JavaScript, Rails и SASS, если это нужно будет для других целей в разработке.
Пропустим основные функции, поскольку вы уже много раз слышали о них, и лучше отметим, что в RubyMine встроены системы отладки, позволяющие быстро оптимизировать код, написанный на Ruby. Есть и интеграция с CVS, Git, Mercurial, Perforce и Subversion. При работе с большими проектами, состоящими из нескольких файлов, они будут группироваться в древовидном стиле, что сделает процесс анализа более комфортным. Обратите внимание, что для стабильной работы этой среды разработки понадобится не менее 4 гигабайт оперативной памяти, а сам софт распространяется на платной основе, но с доступной триальной версией сроком на 30 дней. Загрузите ее и попробуйте, чтобы сформировать решение о покупке.
Скачать RubyMine с официального сайта
Notepad++
Предлагаем затронуть тему и классических текстовых редакторов, которые могут использоваться для написания кодов и станут особенно полезными при создании небольших скриптов, и первый из них называется Notepad++. В нем есть подсветка синтаксиса, нумерация строк, функции поиска и преобразование кодировок. Дополнительно ничего не помешает подключить плагины, если стандартный набор инструментов вас не устраивает.
Notepad++ станет отличным выбором среди тех, кто не хочет инсталлировать сложные среды разработки и просто не нуждается в настолько широкой функциональности. Дополнительно уточним, что при желании в нем можно записать макросы, которые будут полезны при постоянном осуществлении одинаковых действий. Интерфейс полностью переведен на русский, поэтому проблем в понимании отдельных меню и настроек не будет. Порог вхождения в Notepad++ минимальный, что позволит обойтись без использования официальной документации.
Скачать Notepad++
Еще на нашем сайте вы можете найти полезную инструкцию по использованию рассматриваемого софта. Она будет полезна начинающим юзерам, кто только обучается написанию скриптов и ранее не сталкивался с выполнением поставленной задачи. Это же руководство позволит более детально узнать обо всех возможностях Notepad++ и понять, насколько эта программа подходит для постоянного взаимодействия.
Подробнее: Использование текстового редактора Notepad++
SublimeText
SublimeText — самый распространенный текстовый редактор, свободно применяемый для написания кода, ведь он совместим со многими популярными языками программирования, подсвечивает синтаксис, а также имеет встроенную функцию автозаполнения, которая поможет сэкономить время при создании скрипта. Весь перечень поддерживаемых ЯП находится на официальном сайте данной программы, поэтому перед скачиванием рекомендуем с ним ознакомиться, убедившись в том, что это решение удовлетворит ваши потребности.
Отличается SublimeText от других продвинутых текстовых редакторов минималистичным и приятным интерфейсом, поддержкой вкладок, с которыми можно работать одновременно, даже если на каждой из них используются разные языки программирования. Еще стоит отметить высокую скорость работы, что важно при написании скриптов, и наличие консоли, где вы сразу можете ознакомиться с результатами выполнения кода и узнать, возникли ли во время обработки какие-либо ошибки.
Скачать SublimeText
Мы рады, что смогли помочь Вам в решении проблемы.
Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.
Помогла ли вам эта статья?
ДА НЕТ
Как написать скрипт: 9-ти шаговая схема создания скрипта с нуля — ПораРасти
08 Ноя Как написать скрипт: 9-ти шаговая схема создания скрипта с нуля
Опубликовано: 22:26
В категории: Холодные звонки и продажи по телефону
Опубликовал: admin
Как написать скрипт продаж? Таким вопросом задается, наверное, каждый, кто работает в продажах. И это неудивительно — ведь хороший скрипт продаж позволит Вам быстрее и легче привлекать клиентов, поможет менеджерам преодолевать возражения и отвечать на вопросы потенциальных покупателей. Плюсы от использования скрипта очевидны.
Но есть и обратная сторона.
Разработка скрипта продаж — занятие не простое. В статье «3 способа написать и оформить скрипт продаж» я уже делился с Вами своим мнением по поводу подготовки скрипта (электронный формат, бумажный формат).
Сегодня я хочу предложить Вам схему создания скрипта — 9 шаговый алгоритм написания скрипта с нуля (речь идет про написание скрипта холодного звонка. Для других видов звонков алгоритм будет аналогичным с небольшими корректировками). Когда я создаю скрипты продаж для корпоративных клиентов, я сам опираюсь на этот алгоритм.
Я подготовил алгоритм в формате PDF. Скачать его можно бесплатно, разблокировав доступ через (нажать на любую кнопку соцсетей).
[sociallocker id=»17542″]
[/sociallocker]
Более подробно каждый шаг я описал в этих видео:
Как написать скрипт продаж: шаг 1-5 (видео)
Давайте рассмотрим основные шаги при написании скрипта.
1. Начни с сегментации
Этот шаг (к сожалению, незнакомый большинству) позволяет на начальном этапе разделить базу наших потенциальных клиентов на более перспективных и интересных для нас и на менее интересных. На этом шаге важно определить критерии сегментации для своей ситуации. Например, если я продаю тренинги продаж, то для меня клиент с наличием отдела продаж в компании и необученными сотрудниками будет гораздо интереснее, чем клиент вообще без отдела продаж. Таким образом мы для себя выделяем категории клиентов А, B, C и далее по необходимости для Вашего бизнеса. Более подробно этот важный шаг я разбирал на онлайн-тренинг Скрипты продаж, которые выстреливают (здесь можно посмотреть отчет с тренинга), но думаю логика сегментации Вам понятна.
2. Определи целевое действие
На этом шаге важно спланировать для каждого сегмента клиентов те целевые действия, которые будут нам выгодны. Например, с клиентами категории А мы готовы встречаться на территории клиента (т.к. они наиболее перспективные, интересные для нас. Мы готовы инвестировать свое время в таких клиентов), а с клиентами категории С, к примеру, можно ограничиться подпиской на рассылку.
3. Определи ЛПР
ЛПР — лицо, принимающее решение. Кто в Вашем случае определяет решение о работе с Вами? Часто менеджеры напролом пробиваются к руководителю, не понимая, что решение по их вопросу в компании, вероятно принимает другой человек. Это важный шаг, который напрямую влияет на наполнение нашего скрипта эффективными речевыми оборотами.
4. Наполни таргет-лист
Таргет-лист — это список компаний для привлечения. Я рекомендую иметь небольшой список тех, кому Вы хотите позвонить уже в процессе составления скрипта.
5. Продумай выход на ЛПР
Что Вы скажете секретарю, чтобы он Вас соединил с руководителем. Мне обычно достаточно 2-3 техники чтобы обойти почти любого секретаря. В курсе 10 звонков — 10 продаж я о таких техниках рассказываю.
6. Определи идеальную линию разговора с ЛПР
Представьте, что Ваш разговор проходит идеально гладко. Клиент не возражает. Подумайте, с чего Вы начнете беседу, как утеплите контакт, как будете аргументировать свою позицию. Я обычно выделяю 4 составляющих в этом блоке, о которых расскажу в другой статье (техника «ВУУЗ»).
7. Добавь ветвистость
Скрипт продаж подразумевает разные варианты поведения клиентов. Он может согласиться с Вами сразу (в таком случае сработает Ваша идеальная линия разговора), либо будет отказывать и возражать. На 7 шаге важно предусмотреть возможные отказы и отговорки клиента. Я обычно выделяю возражения универсальные (они могут появиться на любом узле скрипта) и узловые (они могут появиться только на определенном узле. Например, во время установления контакта). Преодолеть любые возражения Вам поможет курс Хакер возражений. Там есть все необходимые приемы для обработки любых возражений.
8. Автоматизируй скрипт
На этом шаге я рекомендую автоматизировать скрипт продаж. Вы можете использовать заготовки для автоматизации (например, я использовал экселевский шаблон в курсе Конструктор скриптов продаж), либо специальные сервисы для автоматизации скриптов (мне нравится СкриптДизайнер).
9. Улучшай!
Следите за конверсией каждого узла, скрипта в целом, пробуйте разные ответы на возражения и способы аргументации. И у Вас получится убойный скрипт продаж!
С уважением, Олег (дружить в ВК, инстаграм)
P.s. Более подробно технологию создания скриптов я разобрал на онлайн-тренинге (точнее — воркшопе) Скрипты продаж, которые выстреливают. Посмотрите подробности о том, как прошло мероприятие, какие выводы я сделал для себя в ходе общения с участниками. Возможно, и для Вас и Вашей ситуации это будет полезным.
Полезные ссылки:
Приемы написания скриптов в Bash / Хабр
Администраторам Linux писать скрипты на Bash приходится регулярно. Ниже я привожу советы, как можно ускорить эту работу, а также повысить надежность скриптов.
Совет 1
Не пишите скриптов, которые выполняют действия ничего не спрашивая. Такие скрипты нужны довольно редко. А вот всевозможного «добра» для копирования, синхронизации, запуска чего-либо, хоть отбавляй. И если в любимом Midnight Commander Вы вдруг нажали не на тот скрипт, то с системой может произойти все что угодно. Это как правила дорожного движения — «написано кровью».
Совет 2
Отталкиваясь от предыдущего, в начало каждого скрипта неплохо помещать что-то вроде:
read -n 1 -p "Ты уверен, что хочешь запустить это (y/[a]): " AMSURE
[ "$AMSURE" = "y" ] || exit
echo "" 1>&2
Команда echo, кстати, здесь нужна потому, что после нажатия кнопки у вас не будет перевода строки, следовательно, следующий любой вывод пойдет в эту же строку.
Совет 3
Это ключевой совет из всех. Для того, чтобы не писать каждый раз одно и то же — пользуйтесь библиотеками функций. Прочитав много статей по Bash, я вынужден констатировать, что этой теме уделяется мало внимания. Возможно в силу очевидности. Однако я считаю необходимым напомнить об этом. Итак.
Заведите свою библиотеку функций, например myfunc.sh и положите ее, например в /usr/bin. При написании скриптов она не только поможет сократить ваш труд, но и позволит одним махом доработать множество скриптов, если Вы улучшите какую-либо функцию.
Например, в свете совета 2 можно написать такую функцию:
myAskYN()
{
local AMSURE
if [ -n "$1" ] ; then
read -n 1 -p "$1 (y/[a]): " AMSURE
else
read -n 1 AMSURE
fi
echo "" 1>&2
if [ "$AMSURE" = "y" ] ; then
return 0
else
return 1
fi
}
Единственным необязательным параметром эта функция принимает строку вопроса. Если строка не задана — молчаливое ожидание нажатия (в случаях, когда скрипт уже успел вывести все что нужно еще до вызова этой функции). Таким образом, применение возможно такое:
myAskYN "Ты уверен, что хочешь запустить это?" || exit
Можно написать и еще одну аналогичную функцию myAskYNE, с буквой E на конце, в которой return заменить на exit. Тогда запись будет еще проще:
myAskYNE "Ты уверен, что хочешь запустить это?"
Плюсы очевидны: а) пишете меньше кода, б) код легче читать, в) не отвлекаетесь на мелочи, вроде приставки » (y/[a]): » к тесту (замечу, что [a] означает any, а забранная в квадратные кавычки указывает, что это по умолчанию).
И последнее здесь. Для того, чтобы использовать функции из нашей библиотеки, ее надо не забыть включить в сам скрипт:
#!/bin/bash
a1=myfunc.sh ; source "$a1" ; if [ $? -ne 0 ] ; then echo "Ошибка —
нет библиотеки функций $a1" 1>&2 ; exit 1 ; fi
myAskYN "Ты уверен, что хочешь запустить это?"
echo Run!
Я намеренно уложил весь вызов и обработку ошибки в одну строку, поскольку это вещь стандартная и не относится напрямую к логике скрипта. Зачем же ее растягивать на пол-экрана? Обратите также внимание, что имя скрипта присваивается переменной. Это позволяет задавать имя скрипта один раз, а стало быть, можно дублировать строку и заменить имя библиотеки, чтобы подключить другую библиотеку функций, если надо.
Теперь любой скрипт, начинающийся с этих трех строчек никогда не выполнит что-то без подтверждения. Предоставляю вам самим написать аналогичную myAskYN функцию, называемую myAskYESNO.
Совет 4
Разовьем успех и продемонстрируем несколько очевидных функций с минимальными комментариями.
sayWait()
{
local AMSURE
[ -n "$1" ] && echo "$@" 1>&2
read -n 1 -p "(нажмите любую клавишу для продолжения)" AMSURE
echo "" 1>&2
}
cdAndCheck()
{
cd "$1"
if ! [ "$(pwd)" = "$1" ] ; then
echo "!!Не могу встать в директорию $1 - продолжение невозможно. Выходим." 1>&2
exit 1
fi
}
checkDir()
{
if ! [ -d "$1" ] ; then
if [ -z "$2" ] ; then
echo "!!Нет директории $1 - продолжение невозможно. Выходим." 1>&2
else
echo "$2" 1>&2
fi
exit 1
fi
}
checkFile()
{
if ! [ -f "$1" ] ; then
if [ -z "$2" ] ; then
echo "!!Нет файла $1 - продолжение невозможно. Выходим." 1>&2
else
echo "$2" 1>&2
fi
exit 1
fi
}
checkParm()
{
if [ -z "$1" ] ; then
echo "!!$2. Продолжение невозможно. Выходим." 1>&2
exit 1
fi
}
Здесь обращу ваше внимание на постоянно встречающееся сочетание 1>&2 после echo. Дело в том, что ваши скрипты, возможно, будут выводить некую ценную информацию. И не всегда эта информация влезет в экран, а потому ее неплохо бывает сохранить в файл или отправить на less. Комбинация 1>&2 означает перенаправление вывода на стандартное устройство ошибок. И когда вы вызываете скрипт таким образом:
my-script.sh > out.txt
my-script.sh | less
в нем не окажется лишних ошибочных и служебных сообщений, а только то, что вы действительно хотите вывести.
Совет 5
В Bash не очень хорошо обстоят дела с возвратом значения из функции. Однако при помощи собственной библиотеки этот вопрос легко решается. Просто заведите переменную, в которую функция будет заносить значение, а по выходу из функции анализируйте эту переменную. Кстати, объявление переменной неплохо поместить в начало самой библиотеки ваших функций. Также, вы можете завести и другие переменные, которые будете использовать повсеместно. Вот начало вашей библиотеки функций:
curPath= # переменная с текущим абсолютным путем, где находится скрипт
cRes= # переменная для возврата текстовых значений из функций
pYes= # параметр --yes, который обсудим позднее
Теперь можем добавить к коллекции еще такую полезную функцию:
input1()
{
local a1
if [ -n "$1" ] ; then
read -p "$1" -sn 1 cRes
else
read -sn 1 cRes
fi
# Проверка допустимых выборов
while [ "$2" = "${2#*$cRes}" ] ; do
read -sn 1 cRes
done
echo $cRes 1>&2
}
Вот пример ее использования:
cat <<'EOF'
Выбери желаемое действие:
------------------------
a) Действие 1
b) Действие 2
.) Выход
EOF
input1 "Твой выбор: " "ab."
echo "Выбор был: $cRes"
Эта функция ограничивает нажатие клавиш до списка указанных (в пример это a, b, и точка). Никакие иные клавиши восприниматься не будут и при их нажатии ничего выводиться тоже не будет. Пример также показывает использование переменной возврата ($cRes). В ней возвращается буква, нажатая пользователем.
Совет 6
Какой скрипт без параметров? Об их обработке написано тонны литературы. Поделюсь своим видением.
- Крайне желательно, чтобы параметры обрабатывались независимо от их последовательности.
- Я не люблю использовать однобуквенные параметры (а следовательно и getopts) по той простой причине, что скриптов очень много, а букв мало. И запомнить, что для одного скрипта -r означает replace, для другого replicate, а для третьего вообще remove практически невозможно. Поэтому я использую 2 нотации, причем одновременно: а) —show-files-only, б) -sfo (как сокращение от предыдущего). Практика показывает, что такие ключи запоминаются мгновенно и очень надолго.
- Скрипт должен выдавать ошибку на неизвестный ему ключ. Это частично поможет выявить ошибки при написании параметров.
- Из совета 2 возьмем правило: никогда не запускать скрипт без подтверждения. Но добавим к этому важное исключение — если не указан ключ —yes (ключ, конечно, может быть любым).
- Ключи могут сопровождаться значением. В этом случае для длинных ключей действует такое правило: —source-file=my.txt (написание через равно), а для коротких такое: -sf my.txt (через пробел).
В этом свете обработка параметров может выглядеть так:
while [ 1 ] ; do
if [ "$1" = "--yes" ] ; then
pYes=1
elif [ "${1#--source-file=}" != "$1" ] ; then
pSourceFile="${1#--source-file=}"
elif [ "$1" = "-sf" ] ; then
shift ; pSourceFile="$1"
elif [ "${1#--dest-file=}" != "$1" ] ; then
pDestFile="${1#--dest-file=}"
elif [ "$1" = "-df" ] ; then
shift ; pDestFile="$1"
elif [ -z "$1" ] ; then
break # Ключи кончились
else
echo "Ошибка: неизвестный ключ" 1>&2
exit 1
fi
shift
done
checkParm "$pSourceFile" "Не задан исходный файл"
checkParm "$pDestFile" "Не задан выходной файл"
if [ "$pYes" != "1" ] ; then
myAskYNE "Ты уверен, что хочешь запустить это?"
fi
echo "source=$pSourceFile, destination=$pDestFile"
Этот код дает следующие возможности:Это базовая часть, которую можно развивать и дальше. Например, добавим пару функций обработки параметров в нашу библиотеку:
procParmS()
{
[ -z "$2" ] && return 1
if [ "$1" = "$2" ] ; then
cRes="$3"
return 0
fi
return 1
}
procParmL()
{
[ -z "$1" ] && return 1
if [ "${2#$1=}" != "$2" ] ; then
cRes="${2#$1=}"
return 0
fi
return 1
}
При этом цикл обработки параметров будет выглядеть гораздо более удобоваримым:
while [ 1 ] ; do
if [ "$1" = "--yes" ] ; then
pYes=1
elif procParmS "-sf" "$1" "$2" ; then
pSourceFile="$cRes" ; shift
elif procParmL "--source-file" "$1" ; then
pSourceFile="$cRes"
elif procParmS "-df" "$1" "$2" ; then
pDestFile="$cRes" ; shift
elif procParmL "--dest-file" "$1" ; then
pDestFile="$cRes"
elif [ -z "$1" ] ; then
break # Ключи кончились
else
echo "Ошибка: неизвестный ключ" 1>&2
exit 1
fi
shift
done
Фактически, этот цикл можно копировать из скрипта в скрипт не задумываясь ни о чем, кроме названий ключей и имени переменной для этого ключа. Причем они в данном случае не повторяются и возможность ошибки исключена.
Нет предела совершенству, и можно еще долго «улучшать» функции, например в procParmS проверить на непустое значение третий параметр и вывалиться по ошибке в таком случае. И так далее.
Файл библиотеки функций из этого примера можно скачать здесь.
Тестовый файл здесь.
Как сделать скрипт на компьютере самостоятельно
Опытные пользователи всегда пытаются упростить работу с ПК и наверняка захотят узнать, как сделать скрипт на компьютере и что это такое.
Что такое пакетный файл
Пакетный файл – это термин, который часто приходится слышать пользователям ПК. По сути, это способ делать вещи, не делая их на самом деле. Набор команд также известен как скрипт.
Следовательно, это документ сценария, используемый для автоматизации задач в операционных системах DOS, Windows и OS / 2.
Многим пользователям известен термин интерпретатор командной строки, известный как CMD или командная строка. Он принимает различные директивы в виде ввода с клавиатуры и обрабатывает их.
Пакетный документ играет роль посредника между пользователями и командной строкой. Элементы с форматом bat, cmd и btm содержат команды CMD. Во время запуска такого документа, директивы, записанные в нем, выполняются в интерпретаторе в последовательном порядке. В противном случае их нужно будет вводить вручную, построчно.
Зачем нужен скрипт
Скрипт экономит время пользователя. В противном случае нужно будет вводить одни и те же директивы снова и снова.
Например, можно запланировать выключение операционной системы через определенное время с помощью CMD. Когда будет создан нужный документ, достаточно будет лишь дважды щелкнуть по нему. Он запустится, и система выключится по истечении установленного времени.
Если разработчик хочет использовать командную строку на компьютере при установке программного обеспечения, он может сделать это, включив файл в установочные пакеты. В противном случае придется запускать команды вручную.
При создании пакетного элемента также можно включить циклы (for), условные операторы (if), управляющие операторы (go to) и т. д. Кроме того, есть возможность запустить один документ из другого с помощью функции call.
Основные bat команды
Полезно будет знать некоторые bat директивы, которые помогут создать базовые пакетные файлы:
- Title используетсядляизменениятекстазаголовка, отображаемого в верхней части окна CMD.
- Echo – отображает входной ряд как вывод. Желательно использовать опцию ON или OFF для ECHO, чтобы включить или выключить echo. Эта функция позволяет выводить на экране те директивы, которые выполняются.
- Pause используется для остановки выполнения скрипта.
- Exit – функция для выхода из интерпретатора.
- Cls применяется для очистки экрана от всех команд.
- :: – добавить комментарий. Командная строка игнорирует любой текст, написанный как комментарий.
Выше перечислено внутренние директивы, которые поставляются с ОС. Пакетный скрипт также может поддерживать внешние команды. Они добавляются при установке нового программного обеспечения в системе. Например, если на компьютере установлен Google Chrome, можно воспользоваться функцией «chrome» в окне CMD.
Все эти команды могут помочь создать простой bat-файл. Есть возможность улучшить свой скрипт, изучив больше функций из списка CMD.
Создание bat-скрипта в Windows
В Windows можно создать командный файл, используя шаги ниже или шаги, упомянутые в разделе командной строки MS-DOS. Если удобно использовать стандартные программы, можно воспользоваться любым текстовым редактором (например, Блокнот или WordPad) для создания пакетных документов.
Для того чтобы создать скрипт с расширением bat в блокноте, стоит выполнить следующие действия:
- Щелкнуть Пуск.
- Ввести Блокнот в поле «Выполнить» и нажмите Enter. Также можно использовать любой аналогичный редактор текстовых элементов, например Notepad ++.
- Когда Блокнот откроется, ввести следующие строчки или скопировать и вставить их.
- Щелкнуть «Файл», затем «Сохранить» и перейти в папку, в которой нужно сохранить. В качестве имени можно ввести test.bat. Если в версии операционной системы есть параметр «Сохранить как», выбрать «Все файлы», в противном случае он сохраняется как текстовый. Выполнив эти шаги, нажать кнопку «Сохранить» и выйти из блокнота.
- Чтобы запустить документ, следует дважды щелкнуть на него. Окно CMD откроется автоматически с желаемым выходом. После завершения выполнения, окно автоматически закрывается.
- Можно попробовать добавить функцию echo on в шаг 2, чтобы посмотреть, что происходит на каждой строчке.
Шаги для создания скриптов практически одинаковы, независимо от того, установлена версия Windows 10, 8.1, 7 или даже XP.
Стоит обратить внимание, что можно использовать расширение cmd вместо расширения bat.
Создание bat-файла в MS-DOS
Чтобы создать пакетный элемент в MS-DOS или командной строке Windows, важно выполнить следующие действия:
- Открыть командное окно MS-DOS или загрузить MS-DOS.
- В строке MS-DOS ввести: edit test.bat и нажать Enter.
- Если введено все правильно, появится синий экран редактирования.
- После ввода этих строчек щелкнуть «Файл» и выбрать «Выход». Когда будет предложено сохранить элемент, нажать «Да». Пользователи, у которых нет мыши, могут выполнить эту же задачу, нажав Alt + F для доступа к меню, а затем X для выхода. Нажать Enter, чтобы сохранить изменения.
- Вернувшись к приглашению MS-DOS, ввести: test и нажать Enter, чтобы выполнить test.bat. Поскольку первая строчка представляет собой паузу, сначала будет предложено нажать клавишу. После этого документ запускается построчно. В этом случае будет произведено перечисление элементов в каталогах Windows и Windows \ system.
Полезно обратить внимание: если есть необходимость добавить больше строчек в пакетный элемент, достаточно ввести edit test.bat, чтобы открыть его для редактирования. Некоторые версии MS-DOS и загрузочных дискет могут не иметь директивы редактирования.
Если это так, нужно либо ввести edit.com, либо использовать функцию copy con.
Язык сценариев — Simple English Wikipedia, бесплатная энциклопедия
Язык сценариев или — это язык программирования, который поддерживает сценариев . Сценарии обычно представляют собой короткие компьютерные программы, которые выполняют шаги, которые человек может выполнять по одному. Это автоматизирует работу, делая ее проще и надежнее. Язык сценариев часто является более простым языком и его легче выучить, чем другие языки, но он все же может многое делать.
Скрипты могут выполняться внутри другой программы, например, в веб-браузере или Microsoft Excel.Они также могут быть оболочкой , которая запускается из интерфейса командной строки и выполняет вызовы операционной системы (ОС). Оболочка считается интерактивной — пользователь может выбирать, что вводить, а оболочка реагирует на команду. Их можно использовать для управления заданиями на мэйнфреймах и серверах.
Некоторые люди говорят, что язык сценариев должен быть привязан к конкретному использованию. Другие используют более широкое определение и включают языки программирования общего назначения, которые интерпретируются, а не компилируются. Универсальный означает, что его можно использовать разными способами для разных целей. Некоторые языки общего назначения (например, Java) имеют варианты, для которых можно создавать сценарии (Javascript). Не существует конкретного правила о том, что является языком сценариев, а что нет.
Некоторые распространенные примеры языков сценариев:
- Bash и оболочка C, как управляющие языки для Unix или Unix-подобных операционных систем
- Сценарии, которые выполняются внутри других приложений, называются языком расширения .Веб-браузеры допускают несколько типов сценариев, включая ECMAScript (JavaScript) или XUL. Например, на главной странице Google используется JavaScript. Visual Basic для приложений используется в Microsoft Office. Lua — это язык, специально созданный как язык расширения, и его можно использовать во многих приложениях.
- Игры с расширениями сценариев включают виртуальный мир Second Life и симуляторы Trainz Railroad. В других играх, таких как Веснот, множество реальных игр представляют собой сценарии, написанные другими пользователями.
- Языки обработки текста sed и AWK
- Общее назначение: Perl, [1] Tcl и Python [2] — это языки программирования высокого уровня (ближе к человеческому языку, чем к машинному коду), которые можно использовать для самых разных целей. Некоторые из этих языков сначала предназначались для конкретного использования, а затем были преобразованы в языки общего назначения.
Большинство языков сценариев упрощены для изучения. Часто это могут быть короткие файлы с исходным кодом или вводимые по одной команде в интерфейсе командной строки, который имеет цикл чтение – оценка – печать (REPL, языковая оболочка). [3] Обычно это простой набор команд. Может не быть функций или основного , он просто работает от начала до конца. Если что-то не работает, программист может быстро внести изменения и запустить его снова. Это делает язык сценариев подходящим для создания быстрого прототипа , чтобы проверить, работает ли идея.
Например, большинство людей не называют Java языком сценариев из-за его длинного синтаксиса и правил о том, какие классы существуют в каких файлах, а также потому, что Java не может выполняться интерактивно в REPL.Ему нужны файлы с исходным кодом, и они могут содержать только определения, которые должны использоваться ведущим приложением или средством запуска приложений. (Java — это не то же самое, что JavaScript).
Но Python позволяет выбирать — функции могут быть помещены в файл, его можно запускать без функций и использовать императивный стиль программирования или даже использовать его в интерактивном режиме (вводя и запуская по одной строке за раз).
печать ("Hello World")
Эта одна строка кода Python выводит «Hello World»; никакой функции main () или чего-либо еще не требуется.
Язык сценариев обычно интерпретируется из исходного кода или байт-кода. [4] Однако что-то должно запускать сценарий (интерпретировать его), чтобы компьютер его понял. Это приложение или что-то в ОС. Это часто написано на компилируемом языке и распространяется в форме машинного кода (как исполняемый файл , который не имеет смысла для людей).
Языки сценариев могут быть разработаны для использования людьми, использующими программу — разработка для конечных пользователей.В других случаях они могут быть созданы программистами для собственного использования. Языки сценариев часто используют абстракцию, форму сокрытия информации. Это означает, что пользователям не нужно знать подробности о типах переменных, хранении данных и управлении памятью.
Скрипты часто создаются или изменяются лицом, выполняющим их, [5] , но некоторые из них передаются другим или продаются другим. Например, когда большая часть игр написана на языке сценариев. Иногда сценарий может быть скомпилирован до того, как его будут использовать другие.После компиляции он будет работать быстрее и для его запуска не потребуется другое приложение. И это не позволяет конечным пользователям изменять код.
Ранние мэйнфреймы (в 1950-е годы) не были интерактивными, но использовали сценарии, хранящиеся в пакетных файлах . Язык управления заданиями (JCL) IBM является распространенным примером языка сценариев, используемого для управления пакетной обработкой. [6]
Первые интерактивные оболочки были созданы в 1960-х годах для помощи в удаленной работе первых систем с разделением времени.В них используются сценарии оболочки, которые могут запускать компьютерные программы в компьютерной программе, оболочке. Кальвину Мурсу на его языке TRAC обычно приписывают изобретение подстановки команды . Это позволяет командам изменять сценарий (самомодифицирующийся код). [7] Multics вызывает эти активные функции . [8] Луи Пузен написал первый процессор для командных сценариев под названием RUNCOM для CTSS примерно в 1964 году. Стюарт Мэдник из Массачусетского технологического института написал язык сценариев для IBM CP / CMS в 1966 году.Первоначально он называл этот процессор COMMAND, позднее — EXEC. [9] Multics включал ответвление CTSS RUNCOM, также называемое RUNCOM. [10] EXEC в конечном итоге был заменен на EXEC 2 и REXX.
Такие языки, как Tcl и Lua, с самого начала создавались как языки сценариев общего назначения, которые можно было использовать в любом приложении. Другие языки, такие как Visual Basic для приложений (VBA), могут делать то же самое, но должны работать только с определенными приложениями. Использование языка сценариев общего назначения вместо создания нового языка для каждого приложения обычно упрощает как человеку, пишущему приложение, так и пользователю, пишущему сценарии.
Склейте языки [изменить | изменить источник]
Сценарии иногда используются для подключения разных приложений. Это называется связующим кодом, и язык, созданный специально для этой цели, — это клеевой язык . Конвейеры и сценарии оболочки — типичные примеры связующих языков. Но если в файле сценария написано много логики, лучше думать о нем как о другом программном приложении, а не о «клее».
Склеивающие языки особенно полезны для написания и сопровождения:
- пользовательские команды для командной оболочки;
- программы меньшего размера, чем те, которые лучше реализованы на компилируемом языке;
- программы-оболочки, которые выполняют некоторые автоматические действия до или после запуска приложения, например, электронную таблицу, базу данных, компилятор и т. Д.;
- скрипта, которые могут часто меняться;
Примеры языков склейки:
Устройства, такие как программируемые калькуляторы, также могут иметь свои собственные языки. Например, Texas Instruments TI-92 по умолчанию может быть запрограммирован на языке командных сценариев. Калькулятор TI-NSpire понимает язык Lua. Другие понимают какой-то базовый язык, а может быть, Лисп или что-то еще.
Языки и оболочки управления заданиями [изменить | изменить источник]
Эта группа возникла из автоматизации управления заданиями, которая связана с запуском и контролем поведения системных программ, начиная с JCL IBM.Многие из интерпретаторов этих языков также работают как интерпретаторы командной строки, такие как оболочка Unix или MS-DOS COMMAND.COM
. Другие, такие как AppleScript, предлагают использование англоязычных команд для создания сценариев.
Сценарии графического интерфейса пользователя [изменение | изменить источник]
При построении графического пользовательского интерфейса необходим способ его тестирования. Были созданы специализированные языки сценариев для управления графическими окнами, меню, кнопками и так далее, как это делал бы человек. Часто их можно использовать для точного копирования того, что делает человек (перемещение мыши, щелчок мышью или набор текста на клавиатуре).Это действие или набор действий, которые копируются и запоминаются, называется макросом.
Языки для конкретных приложений [изменить | изменить источник]
Многие большие приложения включают язык сценариев, созданный специально для этого приложения. Приложение может быть игрой или деловой программой. Этот тип языка предназначен для одного приложения. Они выглядят как язык общего назначения (например, QuakeC, смоделированный на основе C), у них есть специальные функции, которые их различают.
Расширяемые / встраиваемые языки [изменить | изменить источник]
Это похоже на языки сценариев для конкретных приложений, поскольку он управляет приложением, но язык может использоваться во многих приложениях.
JavaScript начинался как язык для написания сценариев внутри веб-браузеров; но теперь это универсальный встраиваемый язык. Например, он также используется в продуктах Adobe.
Некоторые языки со временем переходят от одного типа к другому, обычно по мере того, как они добавляют возможности делать больше вещей.
- ↑ Шеппард, Дуг (2000-10-16). «Введение в Perl для новичков». dev.perl.org. Проверено 8 января 2011.
- ↑ Programming is Hard, Let’s Go Scripting…, Ларри Уолл, 6 декабря 2007 г.
- ↑ Привет, Тони; Папай, Гьюри (2014). Компьютерная вселенная: путешествие через революцию . Издательство Кембриджского университета. п. 76. ISBN 978-1-31612322-5 , «Основной характеристикой современных языков сценариев является их интерактивность, иногда называемая средой программирования REPL . […] Характеристики простоты использования и немедленного выполнения с помощью Среда REPL иногда воспринимается как определение языка сценариев «.
- ↑ Браун, Вики. «Языки сценариев».Проверено 22 июля 2009.
- ↑ Луи, Рональд (2008). «Во славу скриптинга». IEEE Computer. Архивировано 27 августа 2013 года.
- ↑ Корпорация IBM (1967). Язык управления заданиями операционной системы IBM System / 360 (C28-6529-4) (PDF).
- ↑ Мурс, Кальвин. «TRAC, язык описания процедур для реактивной пишущей машинки». Архивировано 25 апреля 2001 года. Проверено 9 марта, 2012.
- ↑ Ван Флек (изд.), Томас. «Глоссарий Multics -A- (активная функция)». Проверено 9 марта 2012 г. CS1 maint: extra text: авторы списка (ссылка)
- ↑ Вариан, Мелинда. «ВМ И СООБЩЕСТВО ВМ: прошлое, настоящее и будущее» (PDF). Архивировано из оригинального (PDF) 19 мая 2011 года. Дата обращения 9 марта 2012 года.
- ↑ Ван Флек, Томас (ред.). «Глоссарий Multics -R- (RUNCOM)». Проверено 9 марта 2012 г. CS1 maint: extra text: авторы списка (ссылка)
.
Сценарии с COM-объектами — приложения Win32
- 2 минуты на чтение
В этой статье
Язык сценариев — это язык программирования, который анализируется во время выполнения машиной сценариев , компонентом, который переводит сценарии, написанные на этом языке, в машинный код.Каждый механизм сценариев переводит определенный язык сценариев. Хост сценариев — это приложение, такое как веб-браузер, в котором размещается механизм сценариев для выполнения сценариев. Если ваш хост сценариев поддерживает COM, вы можете писать сценарии, использующие COM-объекты. В следующих разделах описываются хосты сценариев, которые поддерживают COM-объекты, общие языки сценариев и способы перевода между языками сценариев.
Язык сценариев отличается от компилируемого языка тем, что он транслируется в машинный код во время выполнения.Это означает, что каждый раз, когда вы запускаете сценарий, обработчик сценариев сначала анализирует код, а затем запускает его. Напротив, скомпилированные языки, такие как C ++, преобразуются в машинный код один раз во время компиляции. Когда вы запускаете скомпилированное приложение, операционная система просто запускает предварительно скомпилированный код.
Поскольку обработчик сценариев должен повторно анализировать сценарий при каждом запуске, языки сценариев обычно медленнее и менее эффективны, чем их предварительно скомпилированные аналоги. Однако преимущество скриптов в том, что их легко писать и поддерживать.Языки сценариев обычно проще, чем предварительно скомпилированные языки, и при изменении сценария его не нужно перекомпилировать. Языки сценариев идеально подходят для легких и быстро меняющихся приложений, таких как веб-страницы.
Существует несколько сред хоста, в которых вы можете писать сценарии, использующие COM-объекты, как описано ниже:
В каждой из упомянутых выше сред хоста механизм сценариев анализирует и запускает сценарий. Поскольку механизм для каждого языка сценариев является отдельным компонентом, вы можете добавить новый язык сценариев в среду, добавив новый механизм.
Наиболее часто используемые языки сценариев:
- Microsoft Visual Basic Scripting Edition (VBScript), подмножество Visual Basic.
- JavaScript, язык сценариев Netscape, ранее известный как LiveScript.
- Программное обеспечение для разработки Microsoft JScript, реализация Microsoft спецификации языка ECMA 262.
Microsoft предоставляет механизмы сценариев для JScript и VBScript. Другие компании-разработчики программного обеспечения предоставляют механизмы сценариев ActiveX для таких языков, как PerlScript, PScript, Python и других.
Для получения дополнительной информации см. Спецификацию языка ECMA 262.
Обратите внимание, что большинство языков сценариев, таких как VBScript и JScript, не могут получить доступ к файлам или изменить их. Эта неспособность не позволяет сценарию изменять данные на клиентских компьютерах. Однако для COM-объектов таких ограничений нет. После загрузки и установки на клиентские компьютеры они могут выполнять любое стандартное действие приложения. Таким образом, пользователи должны загружать и запускать элементы ActiveX только из надежных источников.
Информацию о переводе между языками сценариев см. В следующих разделах:
.Сценарий
— Wiktionary
- См. Wiktionary: Scripts для получения информации о скриптах в Wiktionary.
Английский [править]
Этимология [править]
Из среднеанглийского scrit , заимствовано из старофранцузского escrit , из латинского scriptum (что-то написанное), из scrībō («писать»).
Произношение [править]
Существительное [править]
скрипт ( счетных и несчетных , множественных скриптов )
- (исчисляемый, устаревший) Надпись; письменный документ.
- Синонимы: курсив, рукопись, почерк, рукопись
- письменных знаков; стиль письма.
- (типографика) Шрифт выполнен с имитацией почерка.
- Синоним: курсив
- (счет, закон) Оригинал векселя или документа.
- (счетно) Письменный документ, содержащий диалог и действие для драмы; текст спектакля, фильма или другого спектакля. Тем более, что финальная форма использовалась для самого спектакля.
- Гипонимы: сценарий, телеспектакль
- (вычисление) Файл, содержащий список пользовательских команд, позволяющий вызывать их один раз для последовательного выполнения.
- Синонимы: командный файл, макрос, сценарий оболочки
- Гипонимы: кофе, здесь-сценарий, постскриптум
- (лингвистика) Система письма, адаптированная к определенному языку или набору языков.
- Синонимы: языковая письменность, система письма
- Сокращение от предписания .
Гипонимы [править]
- Термины ниже должны быть проверены и соотнесены с определениями (смыслами) указанного выше заглавного слова. Каждый термин должен использоваться в том смысле, для которого он подходит. Используйте шаблоны
{{syn | en | ...}}
или{{ant | en | ...}}
, чтобы добавить их в соответствующий смысл (смыслы).
Производные термины [править]
Связанные термины [править]
Переводы [править]
письмо; письменный документ
письменных знаков, стиль письма
шрифт имитация почерка
(закон) оригинал векселя или документа
текст диалога и действия к драме
процедура или программа в вычислениях
Глагол [править]
сценарий ( простого настоящего в единственном числе от третьего лица сценария , причастия настоящего сценарий , простое причастие прошедшего и прошедшего времени сценарий )
- (переходный) Сделать или написать скрипт.
Переводы [править]
сделать или написать сценарий
Ссылки [править]
Анаграммы [править]
Этимология [править]
Заимствовано из английского алфавита .
Произношение [править]
Существительное [править]
скрипт n ( множественное число скрипты , уменьшительное scriptje n )
- сценарий (письменный текст драматического спектакля)
См. Также [править]
Этимология [править]
Заимствовано из английского алфавита .Дублет écrit .
Произношение [править]
Существительное [править]
скрипт м ( множественного числа скрипт )
- сценарий (письменный диалог для пьесы, фильма и т. Д.)
Дополнительная литература [править]
Венгерский [править]
Альтернативные формы [править]
Этимология [править]
Заимствовано из английского алфавита .
Произношение [править]
- IPA (ключ) : [ˈskript]
- Расстановка переносов: сценарий
Существительное [править]
скрипт ( множественное число scriptek )
- (вычислительный) скрипт
Cклонение [править]
португальский [править]
Этимология [править]
Заимствовано из английского алфавита .
Существительное [править]
скрипт м ( множественного числа скриптов )
- (действующий) сценарий (текст диалога и действия к драме)
- (вычислительный) сценарий (исходный код, который интерпретируется, а не компилируется)
Синонимы [править]
- (текст диалога и действия для драмы): roteiro
Связанные термины [править]
румынский [править]
Этимология [править]
Заимствовано из английского алфавита .
Существительное [править]
сценарий n ( множественное число сценарий )
- сценарий (фильма, спектакля, шоу и т.д.)
Синонимы [править]
Связанные термины [править]
.
Подключение | ||
Подключиться к серверу, используя предопределенный сеанс (JScript). | ||
Подключение к SecureCRT по протоколу SSh3 (VBScript). | ||
Подключиться по протоколу telnet и автоматизировать вход (VBScript). | ||
Отправка команд и данных на сервер | ||
Открывает файл и отправляет его содержимое построчно (VBScript и JScript соответственно). | ||
Открывает файл и выполняет некоторую обработку текста. перед отправкой (VBScript). | ||
Загружает текстовый файл на сервер, отправляя ему строку по строкам и направляя вывод в файл (VBScript). | ||
SetEnv.vbs | Автоматизирует установку переменной оболочки DISPLAY для включения удаленное отображение X клиентов (VBScript). | |
SetLinesCols.vbs | Автоматизирует установку переменных оболочки LINES и COLUMNS. для терминальных сред, где эти переменные установлен неправильно (VBScript). | |
SendFKey.vbs | Имитирует нажатие функциональной клавиши (VBScript). | |
Получение вывода с сервера | ||
GetData.vbs | Демонстрирует использование функции Get () для чтения данных. с экрана (VBScript). | |
GetDataToExcel.vbs | Использует функцию Get () для чтения данных с экрана и использует автоматизацию OLE для записи данных в файл Excel (VBScript). | |
GetDataToFile.vbs | Использует функцию Get () для чтения данных с экрана и запишите его в текстовый файл (VBScript). | |
Функции пользовательского интерфейса | ||
MessageBox.vbs | Демонстрирует различные варианты использования и возможности Функция MessageBox () (VBScript и JScript). | |
Prompt.vbs | Демонстрирует использование функции Prompt () (VBScript и JScript). | |
Код сценария совместного использования | ||
CallModule.vbs Module.vbs CallModule.js Module.js | Эти парные скрипты показывают удобный способ структурирования код VBScript и JScript, поэтому общие функции могут использоваться повторно или совместно использоваться более чем одним скриптом (VBScript и JScript). | |
Разные скрипты | ||
WinEnv.vbs | Извлекает некоторые переменные среды пользователя Windows. через Windows Scripting Host (WSH) (VBScript). | |
RunExternal.vbs RunExternal.js | Запускает внешнюю программу из сеанса через WSH (VBScript и JScript). | |
RunWord.vbs | Запустите MS Word через интерфейс автоматизации Word OLE (VBScript). | |
StartLogfile.vbs | Устанавливает имя файла журнала и включает ведение журнала из сценария (VBScript). | |
Login.pl | Простой сценарий входа в систему (PerlScript). | |
ConnectMultiSession.pl | Регистрируется на нескольких серверах UNIX для выполнения некоторых команд (PerlScript). |
.