Linux Команды и аргументы
Вступление
На этом занятии мы рассмотрели расширение оболочки, внимательно изучив команды и аргументы. Знание расширения оболочки важно, потому что многие команды в вашей системе Linux обрабатываются и, скорее всего, изменяются оболочкой до их выполнения.
Интерфейс командной строки или оболочка, используемая в большинстве систем Linux, называется bash, что означает Bourne снова shell. Оболочка bash включает в себя элементы sh (исходная оболочка Bourne), csh (оболочка C) и ksh (оболочка Korn).
В этой главе часто используется команда echo для демонстрации функций оболочки. Команда echo очень проста: она повторяет ввод, который она получает.
аргументы
Одной из основных функций оболочки является выполнение сканирования командной строки. Когда вы вводите команду в командной строке оболочки и нажимаете клавишу ввода, оболочка начинает сканирование этой строки, разбивая ее на аргументы. При сканировании строки оболочка может вносить множество изменений в введенные вами аргументы.
Этот процесс называется расширением оболочки. Когда оболочка закончит сканирование и изменение этой строки, она будет выполнена.
удаление пробелов
Это объясняет, почему следующие четыре разные командные строки одинаковы после расширения оболочки.
Команда echo отобразит каждый аргумент, полученный от оболочки. Команда echo также добавит новый пробел между полученными аргументами.
одинарные кавычки
Вы можете предотвратить удаление пробелов, заключив их в кавычки. Содержимое строки в кавычках рассматривается как один аргумент. На скриншоте ниже эхо получает только один аргумент.
двойные кавычки
Вы также можете предотвратить удаление пробелов, заключив их в двойные кавычки. То же, что и выше, echo получает только один аргумент.
Позже в этом уроке при обсуждении переменных мы увидим важные различия между одинарными и двойными кавычками.
эхо и цитаты
Команда echo может генерировать больше, чем пробелы, табуляции и переводы строк. Посмотрите на странице справочника список вариантов.
команды
внешние или встроенные команды?
Чтобы узнать, будет ли команда, переданная оболочке, выполняться как внешняя команда или как встроенная команда, используйте команду type.
Вы также можете использовать эту команду, чтобы показать вам, является ли команда псевдонимом или нет.
запуск внешних команд
Некоторые команды имеют как встроенную, так и внешнюю версии. Когда одна из этих команд выполняется, встроенная версия имеет приоритет. Для запуска внешней версии необходимо ввести полный путь к команде.
который
псевдонимы
создать псевдоним
Оболочка позволяет создавать псевдонимы. Псевдонимы часто используются для облегчения запоминания имени существующей команды или для упрощения ввода параметров.
сокращать команды
Псевдоним также может быть полезен для сокращения существующей команды.
параметры по умолчанию
просмотр псевдонимов
Вы можете предоставить один или несколько псевдонимов в качестве аргументов команды alias, чтобы получить их определения. Отсутствие аргументов дает полный список текущих псевдонимов.
unalias
Вы можете отменить псевдоним с помощью команды unalias.
отображение расширения оболочки
Упражнение, практика и решение:
1. Сколько аргументов в этой строке (не считая самой команды).
коснитесь ‘/etc/cron/cron.allow’ ‘abc123.txt’ «abc456.txt»
2. Является ли tac встроенной командой оболочки?
3. Существует ли псевдоним для rm?
6. Перечислите все текущие псевдонимы.
7. Создайте псевдоним «город», который повторяет ваш родной город.
8. Используйте свой псевдоним, чтобы проверить, что он работает.
10. Проверьте функциональность set + x, выполнив псевдонимы вашего города и rm.
11. Выполните set + x, чтобы остановить отображение расширения оболочки.
12. Удалите псевдоним вашего города.
13. Каково расположение команд cat и passwd?
14. Объясните разницу между следующими командами:
эхо
/ Бен / эхо
16. Покажите ABC с двумя пробелами между B и C.
(необязательный)
17. Выполните следующую команду (не используйте пробелы), чтобы отобразить точно так же, как показано ниже
Решение заключается в использовании вкладок с.
18. Используйте echo для точного отображения следующего:
19. Используйте одну команду echo для отображения трех слов в трех строках.
Фундаментальные основы Linux. Часть III. Раскрытие команд командной оболочкой
Глава 10. Команды и аргументы
Аргументы
Удаление пробелов
Команда echo будет выводить каждый из принятых от командной оболочки аргументов. Также команда echo осуществляет добавление пробелов между всеми принятыми аргументами.
Одинарные кавычки
Двойные кавычки
Позднее при обсуждении переменных в рамках данной книги мы разберемся с важными различиями между одинарными и двойными кавычками.
Команда echo и кавычки
Команда echo может генерировать и другие символы помимо символов пробелов, табуляции и переноса строки. Обратитесь к странице руководства для ознакомления со списком допустимых обозначений символов.
Команды
Внешние или встроенные команды?
Исполнение внешних команд
Псевдонимы команд
Создание псевдонима команды
Стандартные параметры команд
Просмотр объявлений псевдонимов команд
Вывод информации о раскрытии команд командной оболочкой
Практическое задание: команды и аргументы
2. Является ли команда tac встроенной?
6. Выведите список используемых на данный момент псевдонимов команд.
7a. Создайте псевдоним команды ‘city’, позволяющий вывести название вашего города.
7b. Используйте ваш псевдоним команды для того, чтобы убедиться в его работоспособности.
10. Выполните команду set +x для прекращения вывода информации о раскрытии команд командной оболочкой.
11. Удалите созданный ранее псевдоним команды city.
15. Выведите строку «A B C» с двумя пробелами между буквами B и C.
Найдите два решения с использованием одинарных кавычек, два решения с использованием двойных кавычек и одно решение без использования кавычек (и поблагодарите Rene и Darioush из компании Google за это дополнение).
18. Используйте одну команду echo для вывода трех слов в трех строках.
Корректная процедура выполнения практического задания: команды и аргументы
Ответ: три аргумента
2. Является ли команда tac встроенной?
6. Выведите список используемых на данный момент псевдонимов команд.
7a. Создайте псевдоним команды ‘city’, позволяющий вывести название вашего города.
7b. Используйте ваш псевдоним команды для того, чтобы убедиться в его работоспособности.
10. Выполните команду set +x для прекращения вывода информации о раскрытии команд командной оболочкой.
11. Удалите созданный ранее псевдоним команды city.
15. Выведите строку «A B C» с двумя пробелами между буквами B и C.
Найдите два решения с использованием одинарных кавычек, два решения с использованием двойных кавычек и одно решение без использования кавычек (и поблагодарите Rene и Darioush из компании Google за это дополнение).
18. Используйте одну команду echo для вывода трех слов в трех строках.
Разбираемся с аргументами в Bash-скриптах
Перевод статьи «Handling Arguments in Bash Scripts».
Создание Bash-скриптов для автоматизации набора команд — первый шаг на пути к созданию инструментов, облегчающих вашу жизнь. Даже простые скрипты, читающиеся сверху вниз и запускающиеся по установленному графику, способны сэкономить вам массу времени. Но рано или поздно наступит момент, когда вы захотите настраивать поведение вашего скрипта на лету: создавать директории с нужными вам именами, загружать файлы из определенных git-репозиториев, указывать IP-адреса или порты и т. п. Вот здесь вам и пригодятся аргументы скриптов.
Позиционные и специальные параметры
Bash предоставляет нам переменные, которые присутствуют в любом написанном нами скрипте. Вот несколько самых полезных:
Позиционные параметры содержат значения, которые вы указываете при запуске своего скрипта (в командной строке) в качестве аргументов. Рассмотрим пример. Допустим, у вас есть скрипт, запускающийся следующим образом:
Я использую позиционные параметры в одном из своих простейших скриптов. Этот скрипт я запускаю на работе практически ежедневно (здесь показываю упрощенный вариант):
и все равно все бы прекрасно работало.
Тем не менее, я предпочитаю сохранять позиционные параметры в именованные переменные вверху своего скрипта. Таким образом любой читатель моего скрипта сможет быстро понять, что к чему. Разумеется, это не заменяет хорошую документацию и надежную обработку ошибок, но это приятный маленький бонус в плане читаемости. Подобные вещи хоть немножко, но помогают, так что это хорошая практика.
Когда я запускаю скрипт вот так:
он генерирует структуру директорий:
$0: имя скрипта
Вот что получится при запуске:
$#: число аргументов
$?: последний код возврата
Вот пример использования в скрипте:
Кажется, именно эти переменные вызывают больше всего сложностей у новичков в Bash — и это понятно! Они работают практически одинаково, но разница в их действии может быть очень существенной в каждой отдельной ситуации.
Если вы НЕ берете эти переменные в кавычки, они делают одно и то же: вставляют в указанное место все переданные в скрипт аргументы.
При запуске получим следующее:
Переходим к самому интересному: возьмем переменные в кавычки.
Видите? Один аргумент! Хотите самостоятельно реализовать echo?
Итоги
Надеюсь, теперь вы начинаете понимать силу кастомизации. Используя скрипты Bash, вы можете автоматизировать выполнение многих задач. А благодаря возможности передачи аргументов при вызове скрипта вы можете автоматически выполнять даже те задачи, логика которых зависит от ситуации!
Аргументы командной строки Bash
Функциональность интерпретатора Bash позволяет работать не только со статистическими данными, записанными в скриптах. Иногда возникает необходимость добавить сценарию интерактивности, позволяя принимать внешние параметры скрипта для манипуляции ими в коде.
В этой статье будет рассмотрено, как принимать аргументы командной строки bash, способы его обработки, проверка опций, а также известные особенности при работе с ними.
Параметры скрипта Bash
Интерпретатор Bash присваивает специальным переменным все параметры, введённые в командной строке. В их состав включено название сценария, выполняемого интерпретатором. Такие переменные называются ещё числовыми переменными, так как в их названии содержится число:
Ниже приведён пример использования одного параметра скрипта Bash:
#!/bin/bash
factorial=1
for (( number = 1; number
Результат работы кода:
Переменная $1 может использоваться в коде точно так же, как и любая другая. Скрипт автоматически присваивает ей значение из параметра командой строки — пользователю не нужно делать это вручную.
Если необходимо ввести дополнительные параметры, их следует разделить в командной строке пробелами.
Пример работы кода:
Командный интерпретатор присвоил числа 5 и 10 соответствующим переменным — $1 и $2.
Также параметрами могут быть и текстовые строки. Однако, если есть необходимость передать параметр, содержащий пробел (например имя и фамилию), его нужно заключить в одинарные или двойные кавычки, так как по умолчанию пробел служит разделителем параметров командной строки:
Пример работы кода:
На заметку: кавычки, которые используются при передаче параметров, обозначают начало и конец данных и не являются их частью.
Если необходимо использовать больше 9 параметров для скрипта, то названия переменных немного изменятся. Начиная с десятой переменной, число, стоящее после знака $, необходимо заключать в квадратные скобки (без внутренних пробелов):
Пример работы кода:
Получение названия скрипта Bash
Как уже упоминалось, имя сценария является самым первым параметром скрипта. Чтобы определить название программы, используется переменная $0. Такая необходимость возникает, например, при написании скрипта, который может выполнять несколько функций. Однако при этом возникает одна особенность, которую нужно учитывать на практике:
Пример работы кода:
Как видно, если строкой, фактически переданной в переменную $0, является весь путь к сценарию, то на вывод будет идти весь путь, а не только название программы.
Если нужен скрипт, выполняющий различные функции с учётом того, под каким именем он был вызван из командной строки, придётся проделать дополнительную работу: удалить сведения о пути, который использовался для его вызова.
Для этого специально предусмотрена небольшая команда. Команда basename возвращает только название скрипта без абсолютного или относительного пути к нему:
Результат работы кода:
Проверка параметров скрипта
Передача параметров Bash вынуждает соблюдать осторожность. Если сценарий написан с применением параметров, но запускается без них, то возникнут проблемы в работе программы.
Если попробовать запустить написанный ранее скрипт test2 без аргументов, то перед выводом команд echo будет отображена ошибка:
Чтобы предотвращать подобные ситуации, необходимо действовать на упреждение — проверять аргументы скрипта на наличие значений. Это настоятельная рекомендация при использовании параметров в командной строке, и только после ревизии стоит пускать их в дело:
Пример работы кода:
В данном случае использовалась опция -n из предыдущей статьи о сравнении строк в Bash для проверки на наличие значения в переменной, которая считала параметр.
Обработка неизветсного числа параметров
Для начала рассмотрим один из часто используемых инструментов при работе с параметрами Bash — команду shift. Её прямое назначение заключается в сдвиге параметров на одну позицию влево. Таким образом, значение из переменной $3 переместится в $2, а из $2 — в $1. Но из $1 значение просто отбросится и не сместится в $0, так как там неизменно хранится название запущенной программы.
Эта команда является эффективным способом обработки всех параметров, переданных сценарию, особенно, когда нельзя заранее узнать их количество. Достаточно лишь обработать $1, сделать сдвиг и повторить процедуру.
Пример работы кода:
Этот скрипт выполняет цикл while, в условии которого указана проверка первого параметра на длину. И если она равна нулю, цикл прерывает свою работу. При положительном результате проверки команда shift сдвигает все параметры влево на одну позицию.
Ещё один вариант использование shift — смещать на несколько позиций. Для этого достаточно через пробел указать количество, на которое будет смещён ряд параметров скрипта.
Пример работы скрипта:
На заметку: при использовании shift нужно быть осторожным, ведь сдвинутые за пределы $1 параметры не восстанавливаются в период работы программы.
Обработка опций в Bash
Помимо параметров скрипт может принимать опции — значения, состоящие из одной буквы, перед которыми пишется дефис. Рассмотрим 3 метода работы с ними в скриптах. Сперва кажется, что при работе с опциями не должно возникать каких-либо сложностей. Они должны быть заданы после имени запускаемой программы, как и параметры. При необходимости можно сделать обработку опций командной строки по такому же принципу, как это делается с параметрами.
По примеру выше можно применять shift для обработки простых опций. С помощью инструкции case можно определять, являются ли аргументы Bash опциями:
Пример работы программы:
Блок case работает правильно вне зависимости от того, как расположены аргументы командной строки bash.
Выводы
Для того, чтобы сделать свою программу более интерактивной, можно использовать параметры Bash. Встроенные переменные, в названиях которых фигурирует число, обозначают порядок указанных для программы параметров.
Команда basename используется для обрезания пути запущенного сценария, что часто необходимо для создания гибких программ. Использование команды shift позволяет эффективно проходить по переданным скрипту параметрам, особенно когда их количество неизвестно.
Аргументы командной строки в Linux
Главное меню » Linux » Аргументы командной строки в Linux
Использование переменных аргументов:
Пример 1: отправка трех числовых значений в аргументы командной строки
Следующий вывод появится после выполнения файла сценария с тремя числовыми значениями аргументов: 50, 35 и 15.
Пример 2: использование имени файла в качестве аргумента
Создайте файл bash с помощью следующего сценария, чтобы подсчитать общее количество символов в любом файле. Здесь имя файла будет передано как аргумент командной строки.
Запустите сценарий bash с именем файла в качестве значения одного аргумента и запустите другую команду, чтобы проверить общее количество символов в этом файле. Здесь в качестве значения аргумента используется файл weekday.txt. Общее количество символов в файле weekday.txt – 57.
Использование функции getopts:
Если вы хотите сохранить данные в базе данных или любом файле или создать отчет в определенном формате на основе значений аргументов командной строки, то функция getopts – лучший вариант для выполнения этой задачи. Это встроенная функция Linux. Таким образом, вы можете легко использовать эту функцию в своем скрипте для чтения форматированных данных из командной строки.
Пример 3: Чтение аргументов функцией getopts
Создайте файл bash со следующим сценарием, чтобы понять использование функции getopts. Функция getopts используется с циклом while для чтения параметров аргументов командной строки и значений аргументов. Здесь используются 4 варианта: «i», «n», «m» и «e». оператор case используется для сопоставления конкретной опции и сохранения значения аргумента в переменной. Наконец, распечатайте значения переменной.
Когда вам нужно отправить простые значения в скрипте, лучше использовать переменные аргумента. Но если вы хотите отправлять данные в формате, лучше использовать функцию getopts для получения значений аргументов. Использование переменных аргументов и параметров getopts показано в следующем примере.
Пример 4: Чтение обычных аргументов и аргументов с помощью параметров getopts
Способы чтения аргументов командной строки с использованием переменных аргументов и параметров getopts были показаны отдельно в предыдущих примерах этой статьи. Но эти два способа можно использовать в одном скрипте для чтения значений аргументов командной строки. Создайте сценарий bash со следующим кодом для чтения значений аргументов командной строки, передаваемых параметрами getopts и параметрами аргументов. Здесь три параметра getopts были использованы для чтения имени хоста, имени пользователя и пароля командной строки. Затем была использована команда shift для удаления всех параметров getopts из команды чтения значений командной строки с использованием переменных аргументов. Этот сценарий прочитает и распечатает не более трех значений переменных аргументов. Если после выполнения кода не будет указано значение аргумента без опции, то будет напечатано сообщение; иначе,
Использование ‘$@’ для чтения аргументов командной строки:
Аргументы командной строки можно прочитать без использования переменных аргументов или параметров getopts. Использование символа «$@» в первой скобке – еще один способ прочитать все значения аргументов командной строки.
Пример 5: Чтение значений аргументов командной строки без переменной
Создайте файл bash со следующим сценарием, чтобы прочитать значения аргументов без какой-либо переменной аргумента и вычислить сумму трех значений аргументов командной строки. Здесь в первых скобках используется «$@» для считывания всех значений аргументов в массив. Затем будет напечатана сумма первых трех значений массива.
В выводе появится после выполнения вышеуказанного сценария для значений аргументов 12, 20 и 90. Сумма этих чисел равна 122.
Заключение:
Здесь показаны способы предоставления значений аргументов командной строки без каких-либо параметров и с параметрами. Здесь также показан способ чтения значений аргументов командной строки без использования переменных. Мы надеемся, что эта статья поможет читателям правильно использовать значения аргументов командной строки в своих сценариях bash.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.












