Руководство для начинающих по BASH — входные параметры

Добро пожаловать во вторую часть серии «Руководство для начинающих по 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) и перейдите в папку «scripts», набрав следующее: (about cd command)

CD скрипты

Создайте новый скрипт с именем greetme.sh, введя следующее: (о команде touch)

коснитесь greetme.sh

Откройте скрипт в вашем любимом редакторе, набрав следующее: (about nano command)

нано greetme.sh

Введите следующий текст в нано:

#! / Bin / Баш
эхо "привет $ @"

Нажмите CTRL а также О сохранить файл, а затем CTRL а также Икс закрыть файл.

Для запуска скрипта введите в командной строке следующее, заменив своим именем.

sh greetme.sh 

Если я запускаю скрипт с моим именем, он отображает слова «Привет, Гари».

Первая строка имеет строку #! / Bin / bash, которая используется для идентификации файла как скрипта bash.

Вторая строка использует выражение echo для вывода слова hello, а затем появляется странная запись $ @. (о эхо-команде)

$ @ Раскрывается для отображения каждого параметра, который был введен вместе с именем скрипта. Поэтому, если вы наберете «sh greetme.sh tim», на экране появятся слова «hello tim». Если вы наберете «greetme.sh Тим Смит», то будут отображены слова «Привет, Тим Смит».

Для сценария greetme.sh может быть полезно просто сказать привет, используя только имя. Никто не говорит «привет, Гэри Ньюэлл», когда они встречают меня, они могут сказать «привет, Гэри».

Давайте изменим скрипт так, чтобы он просто использовал первый параметр. Откройте скрипт greetme.sh в nano, набрав следующее:

нано greetme.sh

Измените сценарий так, чтобы он читался следующим образом:

#! / Bin / Баш
эхо "привет $ 1"

Сохраните скрипт, нажав CTRL а также О и затем выйти, нажав CTRL а также ИКС.

Запустите скрипт, как показано ниже (замените мое имя на ваше):

sh greetme.sh Гэри Ньюэлл

Когда вы запускаете скрипт, он просто скажет «привет, Гэри» (или, надеюсь, «привет» и как там вас зовут).

1 после символа $ в основном говорит команде echo, используйте первый параметр. Если вы замените $ 1 на $ 2, тогда будет отображаться «привет newell» (или какова бы ни была ваша фамилия).

Между прочим, если вы заменили $ 2 на $ 3 и запустили скрипт всего с двумя параметрами, результатом будет просто «Hello».

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

Чтобы отобразить количество введенных параметров, откройте скрипт greetme.sh (nano greetme.sh) и измените текст следующим образом:

#! / Bin / Баш
echo "вы ввели $ # names"
эхо "привет $ @"

Нажмите CTRL а также О сохранить сценарий и CTRL а также Икс выйти из нано.

$ # Во второй строке отображает количество введенных параметров.

Пока что все это было новым, но не очень полезным. Кому нужен скрипт, который просто отображает «привет»? 

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

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

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

Откройте свой скрипт greetme.sh и измените его следующим образом:

#! / Bin / Баш
echo "Имя файла: $ 0"
echo "Идентификатор процесса: $$"
echo "-------------------------------"
echo "вы ввели $ # names"
эхо "привет $ @"

Нажмите CTRL а также О сохранить файл и CTRL а также Икс выходить.

Теперь запустите скрипт (замените его на свое имя).

sh greetme.sh 

На этот раз скрипт отображает следующее:

Имя файла: greetme.sh
Идентификатор процесса: 18595
------------------------------
Вы ввели 2 имени
привет Гэри Ньюэлл

$ 0 в первой строке скрипта отображает имя скрипта, который вы запускаете. Обратите внимание, что это ноль доллара, а не доллар o.

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

Чтобы убить скрипт, работающий в фоновом режиме, вам нужен идентификатор процесса скрипта. Не было бы хорошо, если бы скрипт дал идентификатор процесса как часть его вывода. (о командах ps и kill)

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

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

sh greetme.sh gary> greetme.log

Символ> в приведенной выше команде выводит текст «привет, gary» в файл с именем greetme.log.

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

Резюме

Теперь вы сможете писать текст на экране и принимать входные параметры. 

Ссылка на основную публикацию