Руководство для начинающих по BASH
Добро пожаловать во вторую часть серии «Руководство для начинающих по BASH», которая уникальна тем, что это единственный учебник по BASH, написанный новичком для начинающих.
Читатели этого руководства накапливают свои знания и, надеюсь, к концу смогут написать несколько довольно умных скриптов.
В прошлый раз мы покрыли создание вашего первого скрипта который просто отображал слова «Hello World». Он охватывает такие темы, как текстовые редакторы, как открыть окно терминала, куда поместить ваши скрипты, как отобразить слова "Hello World" и некоторые тонкости в escape-символах, таких как кавычки ("").
В этом разделе рассматриваются входные параметры. Есть другие гиды которые учат подобным вещам, но слишком часто они перескакивают на довольно низкоуровневые вещи и, возможно, предоставляют слишком много информации.
Сценарий параметров добавляет персонализацию
В сценарии «Hello World» из последнего урока все было очень статично. Сценарий практически ничего не сделал.
Как мы могли бы улучшить сценарий «Hello World»?
А как насчет сценария, который приветствует человека, который его запускает? Вместо «Привет, мир» будет сказано «Привет, Гэри», «Привет, Тим» или «Привет, Долли».
Без возможности принимать входные параметры нам пришлось бы написать три скрипта: «hellogary.sh», «hellotim.sh» и «hellodolly.sh».
Как создать параметр
Разрешив нашему сценарию считывать входные параметры, мы можем использовать один сценарий для приветствия любого.
Для этого откройте окно терминала (CTRL + ALT + Т) и перейдите в папку со скриптами, набрав следующее: (о команде cd)
cd скрипты
Создайте новый скрипт с именем greetme.sh, набрав следующее: (о сенсорной команде)
коснитесь greetme.sh
Откройте скрипт в своем любимом редакторе, набрав следующее: (о нано-команде)
нано greetme.sh
Введите следующий текст в nano:
#! / bin / bash
эхо "привет $ @"
Нажмите CTRL а также О чтобы сохранить файл, а затем CTRL а также Икс чтобы закрыть файл.
Чтобы запустить сценарий, введите в командной строке следующее, заменив свое имя.
sh greetme.sh Тим
Если я запускаю сценарий со своим именем, он отображает слова «Hello Gary».
В первой строке есть строка #! / Bin / bash, которая используется для идентификации файла как сценария bash.
Во второй строке используется оператор echo для вывода слова hello, а также странная нотация $ @. (о команде эхо)
$ @ Расширяется, чтобы отобразить каждый параметр, который был введен вместе с именем сценария. Итак, если вы наберете «sh greetme.sh tim», то отобразятся слова «hello tim». Если вы наберете «greetme.sh tim smith», то отобразятся слова «hello tim smith».
Использование команд эхо
Было бы неплохо, если бы сценарий greetme.sh просто поздоровался, используя только имя. Никто не говорит «Привет, Гэри Ньюэлл», когда встречается с кем-то, но они могут сказать «Привет, Гэри».
Давайте изменим сценарий так, чтобы он использовал только первый параметр. Откройте скрипт greetme.sh в nano, набрав следующее:
нано greetme.sh
Измените сценарий так, чтобы он читался следующим образом:
#! / bin / bash
эхо "привет $ 1"
Сохраните скрипт, нажав CTRL а также О а затем выйдите, нажав CTRL а также ИКС.
Запустите сценарий, как показано ниже (замените имя на свое):
sh greetme.sh гэри ньюэлл
Когда вы запустите сценарий, он просто скажет «Привет, Гэри» (или, надеюсь, «привет» и как там вас зовут).
1 после символа $ в основном говорит команде echo использовать первый параметр. Если вы замените $ 1 на $ 2, то отобразится "hello newell" (или как там ваша фамилия). Вы также можете добавить 2 доллара после 1, чтобы получить полное имя.
Запуск с более чем одним параметром отобразит их в местах, соответствующих порядку их ввода.
Между прочим, если вы замените $ 2 на $ 3 и запустите сценарий всего с двумя параметрами, на выходе будет просто «Hello».
Как отобразить количество используемых параметров
Можно отображать и обрабатывать количество фактически введенных параметров, а в последующих руководствах будет показано, как использовать счетчик параметров для целей проверки.
Чтобы отобразить количество введенных параметров, откройте скрипт greetme.sh (nano greetme.sh) и измените текст следующим образом:
#! / bin / bash
echo "вы ввели $ # имен"
эхо "привет $ @"
Нажмите CTRL а также О сохранить сценарий и CTRL а также Икс для выхода из нано.
Знак $ # во 2-й строке отображает количество введенных параметров.
Пока все это было в новинку, но не очень полезно. Кому нужен сценарий, который просто отображает "привет"?
Эхо-заявления vs. Входные параметры
Реальное использование операторов echo - предоставить пользователю подробный и содержательный вывод. Если вы можете представить, что хотите сделать что-то сложное, что требует серьезной обработки чисел и манипуляции с файлами / папками, было бы полезно отображать пользователю, что происходит на каждом этапе способ.
Напротив, входные параметры делают ваш скрипт интерактивным. Без входных параметров вам потребовались бы десятки скриптов, выполняющих очень похожие вещи, но с немного разными именами.
Имея в виду все это, есть еще несколько полезных входных параметров, которые неплохо было бы знать, и я включу их все в один фрагмент кода.
Откройте свой скрипт greetme.sh и внесите в него следующие изменения:
#! / bin / bash
echo "Имя файла: $ 0"
echo "Идентификатор процесса: $$"
эхо ""
echo "вы ввели $ # имен"
эхо "привет $ @"
Нажмите CTRL а также О сохранить файл и CTRL а также Икс выходить.
Теперь запустите сценарий (замените на свое имя).
sh greetme.sh
На этот раз сценарий отображает следующее:
Имя файла: greetme.sh
ID процесса: 18595
вы ввели 2 имени
привет, Гэри Ньюэлл
Символ $ 0 в первой строке сценария отображает имя выполняемого сценария. Обратите внимание, что это ноль доллара, а не доллар o.
$$ во второй строке отображает идентификатор процесса выполняемого вами скрипта. Почему это полезно? Если вы запускаете сценарий на переднем плане, вы можете отменить его, просто нажав CTRL а также C. Если вы запустили сценарий в фоновом режиме, и он начал зацикливаться и делать одно и то же снова и снова или начал наносить ущерб вашей системе, вам нужно будет убить его.
Чтобы убить скрипт, работающий в фоновом режиме, вам нужен идентификатор процесса скрипта. Разве не было бы хорошо, если бы сценарий выдавал идентификатор процесса как часть своего вывода? (о командах ps и kill)
Упаковать...
Наконец, прежде чем мы закончим с этой темой, важно обсудить, куда идет результат. Каждый раз, когда сценарий выполнялся до сих пор, результат отображался на экране.
Довольно часто выходные данные сценария записываются в выходной файл. Для этого запустите ваш скрипт следующим образом:
sh greetme.sh gary> greetme.log
Символ> в приведенной выше команде выводит текст «hello gary» в файл с именем greetme.log.
Каждый раз, когда вы запускаете сценарий с символом>, он перезаписывает содержимое выходного файла. Если вы предпочитаете добавлять файлы к файлу, замените> на >>.
Теперь вы должны иметь возможность писать текст на экране и принимать входные параметры.