Как составить работающий скрипт

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-скрипты позволяют задавать и использовать в сценарии собственные переменные. Подобные переменные хранят значение до тех пор, пока не завершится выполнение сценария.

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

#!/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 материалов. Если вы хотите продолжения прямо сейчас — вот список оригиналов этих материалов. Для удобства сюда включён и тот, перевод которого вы только что прочли.

  1. Bash Script Step By Step — здесь речь идёт о том, как начать создание bash-скриптов, рассмотрено использование переменных, описаны условные конструкции, вычисления, сравнения чисел, строк, выяснение сведений о файлах.
  2. Bash Scripting Part 2, Bash the awesome — тут раскрываются особенности работы с циклами for и while.
  3. Bash Scripting Part 3, Parameters & options — этот материал посвящён параметрам командной строки и ключам, которые можно передавать скриптам, работе с данными, которые вводит пользователь, и которые можно читать из файлов.
  4. Bash Scripting Part 4, Input & Output — здесь речь идёт о дескрипторах файлов и о работе с ними, о потоках ввода, вывода, ошибок, о перенаправлении вывода.
  5. Bash Scripting Part 5, Sighals & Jobs — этот материал посвящён сигналам Linux, их обработке в скриптах, запуску сценариев по расписанию.
  6. Bash Scripting Part 6, Functions — тут можно узнать о создании и использовании функций в скриптах, о разработке библиотек.
  7. Bash Scripting Part 7, Using sed — эта статья посвящена работе с потоковым текстовым редактором sed.
  8. Bash Scripting Part 8, Using awk — данный материал посвящён программированию на языке обработки данных awk.
  9. Bash Scripting Part 9, Regular Expressions — тут можно почитать об использовании регулярных выражений в bash-скриптах.
  10. Bash Scripting Part 10, Practical Examples — здесь приведены приёмы работы с сообщениями, которые можно отправлять пользователям, а так же методика мониторинга диска.
  11. Bash Scripting Part 11, Expect Command — этот материал посвящён средству Expect, с помощью которого можно автоматизировать взаимодействие с интерактивными утилитами. В частности, здесь идёт речь об expect-скриптах и об их взаимодействии с bash-скриптами и другими программами.

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

Уважаемые читатели! Просим гуру bash-программирования рассказать о том, как они добрались до вершин мастерства, поделиться секретами, а от тех, кто только что написал свой первый скрипт, ждём впечатлений.

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

Переводить остальные части цикла статей?

Проголосовали 1558 пользователей.

Воздержались 124 пользователя.

#Руководства

  • 5 май 2022

  • 0

Скрипты продаж: введение для тех, кто пока с ними не работает

Перевод руководства HubSpot по скриптам. Что это такое, как они выглядят на примере, как написать скрипт. Два шаблона сценариев для типовых ситуаций.

Кадр: фильм «Любовь и другие лекарства» / 20th Century Fox

Анна Игнатьева

Обозреватель Skillbox Media по маркетингу и IT. С 2015 года работает с SEO, таргетированной и контекстной рекламой. Писала для Skypro, Yagla и Admitad.

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

На сайте HubSpot опубликован большой гайд по скриптам, подготовленный тренером по продажам, создателем сайта Sales Scripter Майклом Хэлпером (Michael Halper). Мы пересказали главное из этого материала, дополнив его шаблонами скриптов из подборки HubSpot.

  • Что такое скрипты продаж
  • Пример сценария для разговора
  • Как разработать скрипт продаж за семь шагов
  • Два шаблона для распространённых ситуаций

Скрипт продаж — это стратегия разговора: набор тезисов, вопросов, реплик, которые продавцы будут использовать во время звонков или на встречах с клиентами. Можно встретить и такое определение: скрипт продаж — это алгоритм разговора с потенциальным покупателем.

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

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

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

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

Менеджер по продажам: Здравствуйте, [имя клиента]. Меня зовут Майкл, я представляю компанию «Международные рекрутеры». Мы помогаем HR-менеджерам искать сотрудников, проводить собеседования и оформлять работников. С нами на эти задачи вам потребуется в два раза меньше времени, чем в среднем по отрасли. Вы планируете нанимать новых сотрудников в этом году?

Клиент: Ну, у нас есть бюджет на семь новых сотрудников.

Менеджер по продажам: А с какой самой большой проблемой вы сталкиваетесь при рекрутменте?

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

Менеджер по продажам: Я часто слышу о такой проблеме. Мы могли бы созвониться на 10 минут, чтобы я узнал больше о ваших целях на этот год и о проблемах? Тогда я бы смог сказать, чем наша компания может вам помочь. Как насчёт этого четверга?

Менеджер по продажам: Хорошо. У меня есть свободное время в 11:00.

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

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

  • Определите, что вы продаёте.
  • Поймите, кто ваши покупатели.
  • Составьте список ваших преимуществ. Найдите, чем вы отличаетесь от конкурентов в лучшую сторону.
  • Найдите болевые точки целевой аудитории. Расскажите, как ваш товар поможет покупателям справиться с проблемами.
  • Включите вопросы о проблемах покупателя.
  • Удалите из разговора лишнее.
  • Сформулируйте призыв к действию.

Теперь рассмотрим каждый пункт подробнее.

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

Например: клиенту подойдут услуги рекрутинга.

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

Опишите, с какими проблемами сталкивается целевая аудитория. Определите, кто ваши конкуренты и какие проблемы покупателей решают они.

Например: «Наши клиенты — менеджеры по найму персонала в SaaS-компании среднего размера».

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

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

Например:

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

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

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

Вот примеры проблем:

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

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

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

Например:

  • Сколько времени вы тратите на закрытие вакансии? Довольны ли вы этим?
  • Насколько вы довольны кандидатами, которые претендуют на вакансии? Можете ли вы выбрать из них специалистов нужного уровня?
  • Хотите ли вы сократить время на проведение собеседований?
  • Как пустующие позиции влияют на бизнес-процессы и прибыль компании?
  • Есть ли в компании важные позиции, которые нужно закрыть как можно скорее?

Другие примеры вопросов, которые можно добавить в скрипт:

  • Итак, вы ищете [повторяете то, что вы услышали от потенциального клиента]. Так ли это?
  • Какие у вас цели на ближайшие три месяца?
  • Какая проблема сейчас для вас самая важная?
  • Как давно вы пытаетесь решить вашу проблему?
  • Есть ли что-то, что я упустил из виду?
  • Как наша услуга может облегчить вашу жизнь?
  • Какие цели поставил руководитель в этом (следующем) году?

Добавьте несколько подобных вопросов в скрипт и задавайте их клиенту. Это простой способ поддержать разговор и узнать о потенциальном покупателе и его проблеме больше.

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

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

Сформулируйте призыв к действию. Диалог с клиентом должен приближать к продаже. Эксперт по продажам Джефф Хоффман утверждает, что каждый контакт с покупателем должен приводить к какому-то действию. Это может быть как решение о сотрудничестве, так и согласие на следующий диалог длиной 10 минут.

Джефф Хоффман отмечает, что всё внимание в разговоре стоит уделить клиенту и его проблеме. Не нужно заканчивать диалог вопросом: «Этот товар может вас заинтересовать?» Этот вопрос похож на викторинный. Он о компании-продавце, а не о клиенте.

Вместо этого вопроса можно продолжить разговор: «У нас есть клиенты, довольные тем, что могут создавать ПО из любой точки мира. Сколько в вашей компании разработчиков?» Это поможет вернуть внимание клиента, даже если он не слышал предыдущих слов продавца.

Помните, что цель каждого обращения к клиенту — приблизить его к покупке.

Рассмотрим два шаблона популярных скриптов продаж. Структуру каждого из них можно использовать для своих сценариев. Оба примера — для B2B-звонков.

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

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

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

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

Представление. Здравствуйте, [имя клиента]. Это [ваше имя] из [название вашей компании]. Вам удобно сейчас разговаривать?

Заявление о ценности. Хорошо. Я звоню, потому что мы помогаем [сообщаем о том, что помогаем решить проблему потенциального клиента].

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

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

Примеры типичных проблем. Как говорят нам другие [целевая аудитория, к которой относится клиент, — например, нанимающие менеджеры], они часто сталкиваются с такими проблемами [проблемы, которые решает продукт]. Вас беспокоит что-либо подобное?

Информация о компании и продукте. Из того, что вы рассказали, я вижу, что будет полезным рассказать больше о нас и нашем продукте. Как я говорил, я представляю [название компании]. И мы предлагаем [объясняете, как продукт решает проблемы клиента, о которых он рассказал].

Закрытие. Но поскольку я позвонил вам неожиданно, я бы не хотел забирать больше времени. Я бы хотел договориться о короткой презентации на 15–20 минут. На ней можно было бы подробнее обсудить ваши задачи и то, чем мы можем помочь. Когда мы могли бы созвониться?

Ниже — ещё один, в этот раз короткий, шаблон скрипта для назначения презентации.

Менеджер по продажам: Здравствуйте, [имя потенциального клиента], это [ваше имя] из [название вашей компании]. Я был на вашем сайте, изучил, чем занимается [название компании потенциального клиента], и хотел бы больше узнать о [проблемы потенциального клиента].

Мы работаем с такими компаниями, как ваша, чтобы помочь с [ценностное предложение]. Как вы думаете, это может помочь в решении [проблемы потенциального клиента]?

Вариант 1: Да, расскажите мне больше о вас.

Менеджер по продажам: Отлично! [Здесь нужно предложить клиенту назвать дату и время, когда он сможет выслушать менеджера, который расскажет больше о продукте.]

Вариант 2: Возражение.

Менеджер по продажам: Я понимаю. Ничего, если я отправлю на вашу почту письмо, которое вы можете посмотреть в удобное для вас время? Также я могу позвонить вам в более удобное время [если причина отказа — неудобное время].

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

Короткий скрипт для общения с секретарём. Секретарь контролирует поток обращений в компанию. Он может отклонять их или переводить на других сотрудников.

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

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

Менеджер по продажам: Здравствуйте, я звоню [имя потенциального клиента]. Меня зовут [ваше имя], я из [название вашей компании].

Вариант 1: Секретарь сразу переадресовывает звонок. [В этом случае переходите к скрипту для разговора с потенциальным клиентом.]

Вариант 2: Секретарь спрашивает, зачем вы звоните.

Менеджер по продажам: Я звоню по поводу письма, которое я отправил на почту [имя потенциального клиента], чтобы рассказать о [ценностное предложение].

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

Почитайте другие статьи Skillbox Media о продажах

Научитесь: Профессия Руководитель отдела продаж B2B и B2C
Узнать больше

Бесплатная книга-сайт на русском, полный гайд
Advanced Bash-Scripting Guide

Введение

BASH — Bourne-Again SHell (что может переводится как «перерожденный шел», или «Снова шел Борна(создатель sh)»), самый популярный командный интерпретатор в юниксоподобных системах, в особенности в GNU/Linux. Ниже приведу ряд встроенных команд, которые мы будем использовать для создания своих скриптов.

break выход из цикла for, while или until
continue выполнение следующей итерации цикла for, while или until
echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
exit выход из оболочки
export отмечает аргументы как переменные для передачи в дочерние процессы в среде
hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
kill посылает сигнал завершения процессу
pwd выводит текущий рабочий каталог
read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.
return заставляет функцию оболочки выйти с указанным значением
shift перемещает позиционные параметры налево
test вычисляет условное выражение
times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
trap указывает команды, которые должны выполняться при получении оболочкой сигнала
unset вызывает уничтожение переменных оболочки
wait ждет выхода из дочернего процесса и сообщает выходное состояние.

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

Что необходимо знать с самого начала

  1. Любой bash-скрипт должен начинаться со строки:

#!/bin/bash

в этой строке после #! указывается путь к bash-интерпретатору, поэтому если он у вас установлен в другом месте(где, вы можете узнать набрав whereis bash) поменяйте её на ваш путь.

  1. Коментарии начинаются с символа # (кроме первой строки).
  2. В bash переменные не имеют типа(о них речь пойдет ниже)

Переменные и параметры скрипта

Приведу как пример небольшой пример, который мы разберем:

#!/bin/bash #указываем где у нас хранится bash-интерпретатор
#присваиваем переменной parametr1 значение первого параметра скрипта
parametr1=$1
#присваиваем переменной script_name значение имени скрипта
script_name=$0
# команда echo выводит определенную строку, обращение к переменным осуществляется через $имя_переменной.
echo "Вы запустили скрипт с именем $script_name и параметром $parametr1"
# здесь мы видим другие кавычки, разница в том, что в одинарных кавычках не происходит подстановки переменных.
echo 'Вы запустили скрипт с именем $script_name и параметром $parametr1'
#Выход с кодом 0 (удачное завершение работы скрипта)
exit 0

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

ite@ite-desktop:~$ ./test.sh qwerty
Вы запустили скрипт с именем ./test.sh и параметром qwerty
Вы запустили скрипт с именем $script_name и параметром $parametr1

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

$DIRSTACK — содержимое вершины стека каталогов
$EDITOR — текстовый редактор по умолчанию
$EUID — Эффективный UID. Если вы использовали программу su для выполнения команд от другого пользователя, то эта переменная содержит UID этого пользователя, в то время как…
$UID — …содержит реальный идентификатор, который устанавливается только при логине.
$FUNCNAME — имя текущей функции в скрипте.
$GROUPS — массив групп к которым принадлежит текущий пользователь
$HOME — домашний каталог пользователя
$HOSTNAME — ваш hostname
$HOSTTYPE — архитектура машины.
$LC_CTYPE — внутренняя переменная, котороя определяет кодировку символов
$OLDPWD — прежний рабочий каталог
$OSTYPE — тип ОС
$PATH — путь поиска программ
$PPID — идентификатор родительского процесса
$SECONDS — время работы скрипта(в сек.)
$# — общее количество параметров переданных скрипту
$* — все аргументы переданыне скрипту(выводятся в строку)
$@ — тоже самое, что и предыдущий, но параметры выводятся в столбик
$! — PID последнего запущенного в фоне процесса
$$ — PID самого скрипта

Условия

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

#!/bin/bash
#в переменную source засовываем первый параметр скрипта
source=$1
#в переменную dest засовываем второй параметр скрипта
dest=$2

# в ковычках указываем имена переменных для сравнения. -eq — логическое сравнение обозначающие «равны»
if [[ "$source" -eq "$dest" ]]
# если они действительно равны, то
then
#выводим сообщение об ошибке, т.к. $source и $dest у нас равны
echo "Применик $dest и источник $source один и тот же файл!"
# выходим с ошибкой (1 — код ошибки)
exit 1
# если же они не равны
else
# то выполняем команду cp: копируем источник в приемник
cp $source $dest
echo "Удачное копирование!"
fi #обозначаем окончание условия.

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

ite@ite-desktop:~$ ./primer2.sh 1 1
Применик 1 и источник 1 один и тот же файл!

ite@ite-desktop:~$ ./primer2.sh 1 2
Удачное копирование!

Структура if-then-else используется следующим образом:

if <команда или набор команд возвращающих код возврата(0 или 1)>
then
<если выражение после if истино, то выполняется этот блок>
else
<если выражение после if ложно, тот этот>

В качестве команд возвращающих код возврата могут выступать структуры [[ , [ , test, (( )) или любая другая(или несколько) linux-команда.

test — используется для логического сравнения. после выражения, неоьбходима закрывающая скобка «]»
[ — синоним команды test
[[ — расширенная версия «[» (начиная с версии 2.02)(как в примере), внутри которой могут быть использованы || (или), & (и). Долна иметь закрывающуб скобку «]]»
(( )) — математическое сравнение.

для построения многоярусных условий вида:

if ...
then ....
else
if ....
then....
else ....

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

if ..
then ...
elif ...
then ...
elif ...

Условия. Множественный выбор

Если необходимо сравнивать какоую-то одну переменную с большим количеством параметров, то целесообразней использовать оператор case.

#!/bin/bash
echo "Выберите редатор для запуска:"
echo "1 Запуск программы nano"
echo "2 Запуск программы vi"
echo "3 Запуск программы emacs"
echo "4 Выход"
#здесь мы читаем в переменную $doing со стандартного ввода
read doing

case $doing in
1)
/usr/bin/nano # если $doing содержит 1, то запустить nano
;;
2)
/usr/bin/vi # если $doing содержит 2, то запустить vi
;;
3)
/usr/bin/emacs # если $doing содержит 3, то запустить emacs
;;
4)
exit 0
;;
*) #если введено с клавиатуры то, что в case не описывается, выполнять следующее:
echo "Введено неправильное действие"

esac #окончание оператора case.

Результат работы:

ite@ite-desktop:~$ ./menu2.sh
Выберите редатор для запуска:
1 Запуск программы nano
2 Запуск программы vi
3 Запуск программы emacs
4 Выход

После выбор цифры и нажатия Enter запуститься тот редактор, который вы выбрали(если конечно все пути указаны правильно, и у вас установлены эти редакторы :) )

Прведу список логических операторв, которые используются для конструкции if-then-else-fi:

-z # строка пуста
-n # строка не пуста
=, (==) # строки равны
!= # строки неравны
-eq # равно
-ne # неравно
-lt,(< ) # меньше
-le,(<=) # меньше или равно
-gt,(>) #больше
-ge,(>=) #больше или равно
! #отрицание логического выражения
-a,(&&) #логическое «И»
-o,(||) # логическое «ИЛИ»

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

Основы BASH. Часть 2

Циклы. Цикл for-in.

Оператор for-in предназначен для поочередного обращения к значениям перечисленным в списке. Каждое значение поочередно в списке присваивается переменной.
Синтаксис следующий:

for переменная in список_значений  
do  
команды  
done  

Рассмотрим небольшой пример:

#!/bin/bash  
for i in 0 1 2 3 4 #переменной $i будем поочередно присваивать значения от 0 до 4 включительно  
do  
echo "Console number is $i" >> /dev/pts/$i #Пишем в файл /dev/pts/$i(файл виртуального терминала) строку "Console number is $i"  
done #цикл окончен  
exit 0  

После выполнения примера в первых 5 виртуальных консолях(терминалах) появится строка с её номером. В переменную $i поочередно подставляются значения из списка и в цикле идет работа со значением этой переменной

Циклы. Цикл while.

Цикл while сложнее цикла for-in и используется для повторения команд, пока какое-то выражение истинно( код возврата = 0).
Синтаксис оператора следующий:

while выражение или команда возвращающая код возврата  
do  
команды  
done  

Пример работы цикла рассмотрим на следующем примере:

#!/bin/bash  
again=yes #присваиваем значение "yes" переменной again  
while [ "$again" = "yes" ] #Будем выполнять цикл, пока $again будет равно "yes"  
do  
echo "Please enter a name:"  
read name  
echo "The name you entered is $name"  
  
echo "Do you wish to continue?"  
read again  
done  
echo "Bye-Bye"  

А теперь результат работы скрипта:

ite@ite-desktop:~$ ./bash2_primer1.sh  
Please enter a name:  
ite  
The name you entered is ite  
Do you wish to continue?  
yes  
Please enter a name:  
mihail  
The name you entered is mihail  
Do you wish to continue?  
no  
Bye-Bye  

Как видим цикл выполняется до тех пор, пока мы не введем что-то отличное от «yes». Между do и done можно описывать любые структуры, операторы и т.п., все они будут выполнятся в цикле.Но следует быть осторожным с этим циклом, если вы запустите на выполнение в нём какую-либо команду, без изменения переменной выражения, вы можете попасть в бесконечный цикл.

Теперь об условии истинности. После while, как и в условном операторе if-then-else можно вставлять любое выражение или команду, которая возвращает код возврата, и цикл будет исполнятся до тех пор, пока код возврата = 0! Оператор [ аналог команды test, которая проверяет истинность условия, которое ей передали.

Рассмотрим еще один пример, я взял его из книги Advanced Bash Scripting. Уж очень он мне понравился :), но я его немного упростил. В этом примере мы познакомимся с еще одним типом циклов UNTIL-DO. Эта практически полный аналог цикла WHILE-DO, только выполняется пока какое-то выражение ложно.
Вот пример:

#!/bin/bash  
echo "Введите числитель: "  
read dividend  
echo "Введите знаменатель: "  
read divisor  
  
dnd=$dividend #мы будем изменять переменные dividend и divisor,  
#сохраним их знания в других переменных, т.к. они нам  
#понадобятся  
dvs=$divisor  
remainder=1  
  
until [ "$remainder" -eq 0 ]  
do  
let "remainder = dividend % divisor"  
dividend=$divisor  
divisor=$remainder  
done  
  
echo "НОД чисел $dnd и $dvs = $dividend"  

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

ite@ite-desktop:~$ ./bash2_primer3.sh  
Введите числитель:  
100  
Введите знаменатель:  
90  
НОД чисел 100 и 90 = 10  

Математические операции

Команда let.
Команда let производит арифметические операции над числами и переменными.
Рассмотрим небольшой пример, в котором мы производим некоторые вычисления над введенными числами:

#!/bin/bash  
echo "Введите a: "  
read a  
echo "Введите b: "  
read b  
  
let "c = a + b" #сложение  
echo "a+b= $c"  
let "c = a / b" #деление  
echo "a/b= $c"  
let "c <<= 2" #сдвигает c на 2 разряда влево  
echo "c после сдвига на 2 разряда: $c"  
let "c = a % b" # находит остаток от деления a на b  
echo "$a / $b. остаток: $c "  

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

ite@ite-desktop:~$ ./bash2_primer2.sh  
Введите a:  
123  
Введите b:  
12  
a+b= 135  
a/b= 10  
c после сдвига на 2 разряда: 40  
123 / 12. остаток: 3  

Ну вот, как видите ничего сложного, список математических операций стандартный:

+ — сложение
— вычитание
* — умножение
/ — деление
** — возведение в степень
% — модуль(деление по модулю), остаток от деления
let позволяет использовать сокращения арифметических команд, тем самым сокращая кол-во используемых переменных. Например: a = a+b эквивалентно a +=b и т.д

Работа с внешними программами при написании shell-скриптов

Для начала немного полезной теории.

Перенаправление потоков.

В bash (как и многих других оболочках) есть встроенные файловые дескрипторы: 0 (stdin), 1 (stdout), 2 (stderr).
stdout — Стандартный вывод. Сюда попадает все что выводят программы
stdin — Стандартный ввод. Это все что набирает юзер в консоли
stderr — Стандартный вывод ошибок.
Для операций с этими дескрипторами, существуют специальные символы: > (перенаправление вывода), < (перенаправление ввода). Оперировать ими не сложно. Например:

cat /dev/random > /dev/null #перенаправить вывод команды cat /dev/random в /dev/null (абсолютно бесполезная операция :)) )

или

ls -la > listing #записать в файл listing содержание текущего каталога (уже полезней)  

Если есть необходимость дописывать в файл(при использовании «>» он заменятеся), необходимо вместо «>» использовать «>>«

sudo < my_password

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

./program_with_error 2> error_file

цифра 2 перед «>» означает что нужно перенаправлять все что попадет в дескриптор 2(stderr).
Если необходимо заставить stderr писать в stdout, то это можно след. образом:

./program_with_error 2>&1

символ «&» означает указатель на дескриптор 1(stdout)
(Поумолчанию stderr пишет на ту консоль, в котрой работает пользователь(вренее пишет на дисплей)).

2. Конвееры.

Конвеер — очень мощный инструмент для работы с консолью Bash. Синтаксис простой:
команда1 | команда 2 — означает, что вывод команды 1 передастся на ввод команде 2
Конвееры можно группировать в цепочки и выводить с помощью перенаправления в файл, например:

ls -la | grep «hash» |sort > sortilg_list

вывод команды ls -la передается команде grep, которая отбирает все строки, в которых встретится слово hash, и передает команде сортировке sort, которая пишет результат в файл sorting_list. Все довольно понятно и просто.

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

1. Передача вывода в переменную.

Для того чтобы записать в переменную вывод какой-либо команды, достаточно заключить команду в `` ковычки, например

a = ` echo «qwerty» `
echo $a

Результат работы: qwerty

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

LIST=`find /svn/ -type d 2>/dev/null| awk '{FS="/"} {print $4}'| sort|uniq | tr 'n' ' '`  
for ONE_OF_LIST in $LIST  
do  
svnadmin hotcopy /svn/$ONE_OF_LIST /svn/temp4backup/$ONE_OF_LIST  
done  

Здесь мы используем цикл for-do-done для архивирование всех директорий в папке /svn/ с помощью команды svnadmin hotcopy(что в нашем случае не имеет никого значения, просто как пример). Наибольшй интерес вызывает строка: LIST=find /svn/ -type d 2>/dev/null| awk '{FS="/"} {print $4}'| sort|uniq | tr 'n' ' ' В ней переменной LIST присваивается выполнение команды find, обработанной командами awk, sort, uniq,tr(все эти команды мы рассматривать не будем, ибо это отдельная статья). В переменной LIST будут имена всех каталогов в папке /svn/ пгомещенных в одну строку(для того чтобы её стравить циклу.

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

Общее понимание скрипта

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

Скрипт JavaScript

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

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

История появления скриптов

Для общего развития предлагаю немного окунуться в историю появления скриптов и взглянуть на то, какими они были раньше. Начали применять их под управлением семейства операционных систем Unix еще 50 лет назад. Одной из первых командных оболочек была sh, в ней использовались shell scripts, которые позволяли выполнять самые разнообразные задачи на компьютере.

SH для написания скриптов в Unix

Ниже вы видите небольшой код, предназначенный для конвертирования изображения из JPG в PNG:

for jpg; do # использовать $jpg для каждого имени файла по очереди

    png="${jpg%.jpg}.png"                    # получить PNG-версию имени файла .jpg с .png

    echo converting "$jpg" ...               # сообщение для пользователя

    if convert "$jpg" jpg.to.png ; then      # использовать утилиту convert для создания временного PNG-файла

        mv jpg.to.png "$png"                 # если сработало, переименовать временный PNG-файл, дав требуемое имя

    else                                     # ...иначе напечатать сообщение об ошибке

        echo 'jpg2png: ошибка: результат сохранен в "jpg.to.png".' >&2

        exit 1

    fi                                       # конец "if"

done # конец "for"

echo "Успешно преобразовано" # сообщение об успехе

exit 0

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

Сферы использования скриптов

Скрипты часто используются на веб-сайтах. Чаще всего они пишутся на языках PHP и JavaScript. Первый используется для написания той части сайта, которую не видит посетитель, то есть бэкенда, а второй в большинстве случаев отвечает за визуал, то есть разные анимации, плавные переходы и другие действия (фронтэнд).

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

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

Если говорить о Windows, то в ней вы можете найти встроенный инструмент CMD (PowerShell), который и предназначен для запуска скриптов, хранящихся в формате BAT.

Самостоятельное написание и применение скриптов

Разберем самостоятельное написание и применение скриптов на примере Windows. Допустим, у вас стоит задача проверить стабильность соединения с конкретным сайтом без запуска браузера. Для этого есть одна полезная команда, запускаемая через Командную строку. А если нужно еще сформировать и отчет о результатах проверки, не совсем удобно будет вводить несколько разных команд по очереди, особенно в тех случаях, когда задача выполняется раз в несколько дней или чаще. Тогда создается BAT-файл с таким содержимым:

@echo off

:start

ping -n 5 yandex.ru | find "TTL=" > nul

if %errorlevel%==1 (

    echo Ping No on IP yandex.ru Data: %date% %time% >>Result.txt

    ) else (

        echo Ping Yes on IP yandex.ru Data: %date% %time% >>Result1.txt

        )

timeout /T 5 /NOBREAK

goto :start

Этот скрипт анализирует доступ к сайту yandex.ru и создает отчет на рабочем столе. Попробуйте создать простой текстовый файл, внести туда этот код, поменять адрес сайта и сохранить файл с расширением .bat. Запустите его и посмотрите, что получится в итоге.

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


Загрузить PDF


Загрузить PDF

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

  1. Изображение с названием Write PHP Scripts Step 1

    1

    Откройте текстовый редактор «Блоконот». Эту программу вы будете использовать для написания и изменения вашего кода.

    • Для запуска «Блокнота» на любой версии Windows можно использовать сочетание клавиш Win + R > Notepad.
    • Запустить TextEdit на Mac OS можно через меню «Программы» > TextEdit.
  2. Изображение с названием Write PHP Scripts Step 2

    2

    Наберите в «Блокноте» простую команду. Блок кода PHP в начале и в конце обрамляется специальными скобками, так называемыми тегами (“<?php” “?>”). “Echo” — это очень простая команда (инструкция для компьютера) в языке PHP, предназначенная для вывода текста на экран. Текст, который вы хотите напечатать, следует заключить в кавычки. В конце строки должна стоять точка с запятой.

    • Введенный код должен выглядеть примерно так: <?php echo “Hello World!”; ?>.
  3. Изображение с названием Write PHP Scripts Step 3

    3

    Сохраните файл с именем “hello world” и расширением .php. Это действие можно выполнить через меню «Файл» > «Сохранить как…»

    • В «Блокноте», добавьте расширение .php к названию файла и заключите в кавычки. Таким образом, «Блокнот» уже не будет считать файл текстовым и не станет преобразовывать его в текстовый формат. Если не добавить кавычки, то имя файла автоматически станет следующим: hello world.php.txt. В качестве альтернативного варианта отключения автоматического добавления расширения .txt при сохранении в меню «Тип файла» можно выбрать значение “Все файлы (*.*)». В этом случае имя файла останется таким, каким вы его введете, и вам уже не нужно будет добавлять кавычки.
    • В программе TextEdit не нужно добавлять кавычки в название файла при его сохранении. Вместо этого появится всплывающее окно с запросом на подтверждение того, что вы хотите сохранить файл с расширением .php.
    • Убедитесь в том, что сохраняете файл в корневом каталоге документов вашего сервера. Обычно внутри папки сервера Apache на Windows этот каталог называется “htdocs”. Для Mac каталог по умолчанию расположен в /Library/Webserver/Documents, однако путь может быть скорректирован при настройке сервера.
  4. Изображение с названием Write PHP Scripts Step 4

    4

    Откройте PHP-файл в веб-браузере. Откройте предпочитаемый вами браузер и введите в адресной строке имя созданного PHP-файла: http://localhost/hello world.php. Окно браузера должно отобразить результат команды echo.

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

    Реклама

  1. Изображение с названием Write PHP Scripts Step 5

    1

    Поймите принцип работы тегов PHP. Теги “<?php” и “?>” сообщают движку PHP, что все, находящееся между этими скобками, — это код PHP. Все, что находится за этими скобками, считается обычным HTML, который игнорируется движком PHP и передается браузеру как любой другой HTML. При этом важно понимать, что скрипты PHP напрямую встраиваются в обычные веб-страницы HTML.

  2. Изображение с названием Write PHP Scripts Step 6

    2

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

    • При этом движок PHP на самом деле не выводит текст на экран. Результат работы движка передается в браузер как HTML. Сам браузер и не догадывается, что получает итоговый вывод скрипта PHP. Когда речь идет о браузере, его работа полностью строится на обычном HTML.
  3. Изображение с названием Write PHP Scripts Step 7

    3

    Используйте теги HTML, чтобы сделать шрифт текста жирным. Добавление отдельных тегов HTML может приводить к изменению формата вывода команд PHP. Теги “<strong>” “</strong>” делают жирным шрифт всего текста, заключенного между ними. Обратите внимание, что теги должны окружать выводимый текст, но при этом располагаться внутри кавычек команды echo.

    • Ваш код должен выглядеть примерно так:
      <?php?
      echo «<strong>Hello World!</strong>»;
      ?>
  4. Изображение с названием Write PHP Scripts Step 8

    4

    Сохраните файл и откройте его в браузере. Используйте меню «Файл» > «Сохранить как…» и сохраните файл с именем «helloworld2.php», а затем откройте его в браузере, используя адрес: http://localhost/helloworld2.php. Текст страницы не поменяется, но шрифт станет жирным.

    • Проверьте, что вы сохранили файл в корневой директории документов сервера. Обычно внутри папки сервера Apache на Windows этот каталог называется “htdocs”, для OSX каталог по умолчанию расположен в /Library/Webserver/Documents, однако путь может быть скорректирован при настройке сервера.
  5. Изображение с названием Write PHP Scripts Step 9

    5

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

    • Теперь ваш код будет выглядеть примерно так:
      <?php
      echo “Hello World!”<br>;
      echo “How are you doing?”;
      ?>
  6. Изображение с названием Write PHP Scripts Step 10

    6

    Сохраните и откройте в браузере файл «hello world double.php». Теперь на странице будет два предложения, расположенных по порядку на двух разных строках. Обратите внимание на новый тег “<br>” в первой строке PHP скрипта. Этот тег HTML сигнализирует браузеру о том, что нужно выполнить перенос строки.

    • Если не добавить “<br>”, то предложения будут выведены на одной строке:
      Hello World!How are you doing?

    Реклама

  1. Изображение с названием Write PHP Scripts Step 11

    1

    Представьте себе переменные, как хранилища данных. Чтобы обрабатывать информацию, будь то числа или имена, вам необходимо создать своеобразный контейнер для хранения информации. Данный процесс называется объявлением переменной. В PHP синтаксис объявления переменной выглядит так: “$myVariable = “Hello World!”;”

    • Знак доллара ($) в самом начале сообщает движку PHP, что далее идет переменная $myVariable. Все переменные обязательно должны начинаться со знака доллара, но название самой переменной может быть любым.
    • В примере выше строка «Hello World!» — это значение, а переменной является $myVariable. Вы сообщили PHP, что нужно сохранить значение справа от знака равенства (=) в переменной, расположенной слева от знака равенства.
    • Переменная, содержащая текстовое значение, называется строкой.
  2. Изображение с названием Write PHP Scripts Step 12

    2

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

    • Ваш код должен выглядеть примерно так:
      <?php>
      $myVariable = “Hello World!”;
      echo $myVariable;
      ?>
  3. Изображение с названием Write PHP Scripts Step 13

    3

    Сохраните и откройте файл в браузере. Воспользуйтесь меню «Файл» > «Сохранить как…» и сохраните файл с именем “myfirstvariable.php”. Откройте браузер, и введите в него адрес: http://localhost/myfirstvariable.php; выполненный скрипт выведет значение переменной. Результат окажется тем же, что и при выводе обычного текста, но способ его получения будет отличаться.

    • Убедитесь в том, что вы сохранили файл в корневой директории документов сервера. Обычно внутри папки сервера Apache на Windows этот каталог называется “htdocs”, для OSX каталог по умолчанию расположен в /Library/Webserver/Documents, однако этот путь может быть скорректирован при настройке сервера.
  4. Изображение с названием Write PHP Scripts Step 14

    4

    Используйте переменные с числами. Переменные также могут хранить в себе числовые значения (например, целые числа), с которыми можно выполнять простые математические действия. Для примера объявите в скрипте три переменные:“$mySmallNumber”, “$myLargeNumber”, и “$myTotal”.

    • Ваш код должен выглядеть примерно так:
      <?php
      $mySmallNumber;
      $myLargeNumber;
      $myTotal;
      ?>
  5. Изображение с названием Write PHP Scripts Step 15

    5

    Присвойте целые численные значения первым двум переменным. Присвойте целые значения для “$mySmallNumber” и “myLargeNumber”.

    • Обратите внимание, что целые числа не нужно заключать в кавычки. В противном случае числа будут считаться строковыми значениями, как будто бы они являются текстом наподобие “Hello World!”.
    • Ваш код должен выглядеть примерно так:
      <?php
      $mySmallNumber = 12;
      $myLargeNumber = 356;
      $myTotal;
      ?>
  6. Изображение с названием Write PHP Scripts Step 16

    6

    Используйте третью переменную для суммирования и вывода результата. Чтобы не выполнять расчеты самостоятельно, можно просуммировать две переменные в “$myTotal”. Просто укажите соответствующую математическую функцию, и компьютер выполнит расчет за вас. Чтобы вывести результат на экран, нужно всего лишь вызвать команду echo с переменной в качестве параметра. Вызов команды echo должен располагаться после объявления переменной.

    • Любое изменение значений объявленных ранее переменных будет отражаться на результате вывода значения переменной “$myTotal”, выводимой с помощью команды echo.
    • Теперь ваш код должен выглядеть примерно так:
      <?php
      $mySmallNumber = 12;
      $myLargeNumber = 356;
      $myTotal = $mySmall Number + $myLargeNumber;
      echo $myTotal;
      ?>
  7. Изображение с названием Write PHP Scripts Step 17

    7

    Сохраните файл и откройте скрипт в браузере. Ваш браузер должен вывести на экран одно число. Это число будет являться суммой двух значений, определенной расчетом переменной “$myTotal”.

  8. Изображение с названием Write PHP Scripts Step 18

    8

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

    • Первая переменная с именем $myVariable содержит строку «Hello World!». Пока вы сами не измените значение этой переменной, $myVariable будет содержать данную строку текста без изменений.
    • Команда echo будет выводить на экран заданное вами значение переменной $myVariable.
  9. Изображение с названием Write PHP Scripts Step 19

    9

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

    • Каждой из двух переменных $mySmallNumber и $myLargeNumber было присвоено целое число.
    • Третья переменная $myTotal сохраняла в себе сумму значений двух вышеуказанных переменных $mySmallNumber и $myLargeNumber. Пока $mySmallNumber хранит одно числовое значение, а $myLargeNumber хранит другое число, $myTotal в результате вычисления становится равным сумме двух этих чисел. Результат вычисления может измениться с изменением значения любой из исходных переменных.

    Реклама

Советы

  • Статья предполагает, что на вашем ПК установлены Apache и PHP. Когда в статье упоминается сохранение файла, необходимо сохранить его в директории «ht docs» (для Windows)) или “LibraryWebServerDocuments” (для Mac), расположенной в корневой папке установки Apache.
  • Полезным может оказаться тестирование созданных PHP файлов в XAMPP, бесплатной программе, которая установит для вас Apache и PHP и поможет запустить локальный сервер на вашем компьютере.
  • Комментарии очень помогают при программировании на любом языке, поэтому также будет полезно ознакомиться и со статьей «Как добавить комментарий в PHP».

Реклама

Что вам понадобится

  • Веб-сервер Apache (Win32);

  • PHP (Win32);
  • Текстовый редактор (один из списка ниже):

    • «Блокнот» (Windows);
    • Notepad++ (Windows) (имеет встроенную подсветку синтаксиса для упрощения чтения кода);
    • Textwrangler (Mac) (имеет схожие возможности с Notepad++ );
  • Редактор HTML (один из списка ниже):

    • WYSIWYG;
    • Adobe Dreamweaver;
    • Microsoft Expression Web;
    • IDE, например Microsoft Visual Studio Web;
  • Mozilla Firefox (можно использовать любой браузер, но особой популярностью среди веб-разработчиков пользуется Mozilla)
  • Для начинающих полезен XAMPP (свободно распространяемый набор программ, включающий в себя сервер с поддержкой PHP, Perl и многими другими дополнениями, в том числе Python)

Об этой статье

Эту страницу просматривали 35 078 раз.

Была ли эта статья полезной?

Понравилась статья? Поделить с друзьями:
  • Исправить фото как называется
  • Составить предложение с частицей именно как раз
  • Как составить тендерную таблицу
  • Как найти радиус угла в прямоугольном треугольнике
  • Водители лишенные прав как найти