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