Skip to main content

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

Командная строка Windows (CMD).Часть 1 (Май 2024)

Командная строка Windows (CMD).Часть 1 (Май 2024)
Anonim

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

скрипты cd

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

touch greetme.sh

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

nano greetme.sh

Введите следующий текст в nano:

#! / bin / bash echo "hello $ @"

Нажмите CTRL и O, чтобы сохранить файл, а затем CTRL и X, чтобы закрыть файл.

Чтобы запустить сценарий, введите в командную строку, заменяющую свое имя.

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 просто поздоровался, используя только первое имя. Никто не говорит «hello gary newell», когда они встречаются со мной, однако они могут сказать «привет Гэри».

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

nano greetme.sh

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

#! / bin / bash echo "hello $ 1"

Сохраните сценарий, нажав CTRL и O, а затем выйдите, нажав CTRL и X.

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

sh greetme.sh gary newell

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

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

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

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

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

#! / bin / bash echo "вы ввели $ # имена" echo "hello $ @"

Нажмите CTRL и O, чтобы сохранить сценарий, CTRL и X, чтобы выйти из nano.

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

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

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

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

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

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

#! / bin / bash echo "Имя файла: $ 0" echo "Идентификатор процесса: $$" echo "---------------------------- --- "echo" вы ввели $ # имена "echo" hello $ @ "

Нажмите CTRL и O, чтобы сохранить файл и CTRL и X, чтобы выйти.

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

sh greetme.sh

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

Имя файла: greetme.sh ID процесса: 18595 ------------------------------ вы ввели 2 имени hello gary newell

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

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

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

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

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

sh greetme.sh gary> greetme.log

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

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

Резюме

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