Параметры команд
Большинство команд, используемых в Bash, могут отдаваться как одним словом, так и предполагать после себя какие-либо уточняющие параметры.
Мы будем называть параметрами все, что идет после команды. При этом делить параметры на ключи и аргументы. Ключами будем называть то, чему обычно предшествует один или два знака минуса. Ключи, если присутствуют, ставятся перед аргументами. У команды могут быть как ключи, так и аргументы, так и только ключи или только аргументы.
Обычно аргументы – это то, над чем выполняется команда. Например, команда перехода в другую директорию должна получить в качестве аргумента имя каталога, куда следует перейти. Команде вывода на экран содержимого файла надо передать имя файла.
Ключи модифицируют, как бы видоизменяют работу программы. Например, с помощью команды просмотра содержимого каталога можно вывести простой список вложенных объектов. Используя же определенный ключ, можно получить подробные сведения о каждом файле и папке.
Рассмотрим использование параметров на примере команды ncal , которая выводит на экран календарь. Без параметров она выведет календарь на текущий месяц.
Если мы хотим увидеть календарь за другой месяц, следует передать программе ncal два аргумента: месяц и год.
Если указать только один аргумент, то будет считаться, что передается только год. Будет выведен календарь на целый год.
С помощью ключа -b можно перевернуть календарь на 90 градусов. Понятно, что аргументы могут быть как указаны или нет. В последнем случае получится перевернутый календарь на текущий месяц.
У команд может быть множество ключей. Их можно комбинировать.
В данном случае используется два ключа. Ключ -w приказывает ncal выводить кроме прочего номера недель года. На скриншоте выше ключи записаны вместе. Однако можно было дать команду так: ncal -b -w 02 2019 .
Опция не всегда обозначается маленькой буквой. Бывают ключи, обозначаемые заглавной буквой или словом. В случае слова используется два знака минуса, чтобы Bash понимал, что перед ним не перечень подряд идущих ключей, а только один. В примере ниже опции -V и —version программы python3 делают одно и тоже – выводят версию интерпретатора.
Существуют команды, которые не имеют смысла без аргументов, то есть для них не задано поведение «по-умолчанию». Например, команда sleep , заставляющая bash выполнить задержку перед следующей командой. Время можно указывать в секундах, минутах и др.
Отметим, что понятия «команда», «параметр», «ключ», «аргумент» не являются каким-либо стандартом. В терминологии Bash ключи также называют опциями, аргументы – операндами, то есть тем, над чем выполняется команда.
Однако с точки зрения программирования все, что содержит строка команды, это аргументы. Введенная строка передается программе целиком, где «разрезается» на отдельные слова, которые помещаются в массив, первый элемент которого – имя вызываемой программы. Далее программа так или иначе обрабатывает аргументы, если предполагает работу с ними.
Объясните, что делает команда echo . По результату выполнения echo -e «one\ntwo\tthree» объясните назначение ключа -e .
Курс с ответами к заданиям и дополнительными уроками в PDF
Введение в Linux и Bash. Курс
2. Командные файлы в Linux.
Для того чтобы текстовый файл можно было использовать как командный, существует несколько возможностей.
Пусть с помощью редактора создан файл с именем f1, содержащий одну строку следующего вида: date; pwd; ls. Можно вызвать оболочку shell как команду, обозначаемую sh, и передать ей файл fl, как аргумент или как перенаправленный вход: $ sh fl или $ sh < fl. В результате выполнения любой из этих команд будет выдана дата, затем имя текущего каталога, а потом содержимое каталога.
Файл можно выполнить и в текущем экземпляре shell. Для этого существует специфическая команда . (точка): .fl.
Более удобный вариант работы с командным файлом — это превращение его в выполняемый файл, т.е. просто сделать его командой (запускающей этот файл по его названию), что достигается изменением кода защиты. Для этого надо разрешить выполнение этого файла. Например, chmod 711 fl сделает у этого файла код защиты «rwx—x—x». Тогда простой вызов fl приведет к выполнению тех же трех команд, которые были записаны в файл.
Результат будет тот же, если файл с содержимым date; pwd; ls будет представлен в виде:
так как переход на другую строку также является разделителем в последовательности команд.
Начинать командный файл надо всегда с пустой строки или пустого оператора «:». Их выполнение происходит в режиме интерпретации с помощью shell-интерпретатора.
Работу всех команд операционной системы упрощенно можно представить следующим образом: команда — это некоторое устройство, которое выполняет преобразование входного потока в выходной.
Входной поток в команде может быть задан четырьмя способами: указанием адреса входного потока справа от команды; отсутствием в команде прямого указания на адрес входного потока; перенаправлением входного потока с помощью символа «
Выходной поток может быть задан пятью способами: по умолчанию, без явного указания на выходной поток; явным указанием выходного потока; перенаправлением выходного потока одной команды на вход другой (символ |); перенаправлением в начало файла (символ «>»); перенаправлением в конец файла (символ «>>»).
Выходной поток одной команды может быть направлен во входной поток другой команды посредством организации конвейера команд. Для создания конвейера команд между объединяемыми командами ставится знак |.
Для вывода всех файлов текущего каталога на экран служит команда ls -1. Для ограничения выходного потока этой команды, вывода каталога отдельными фрагментами, служит команда more. Соединив эти две команды в конвейер ls –l| more получим, что содержимое текущего каталога готовится командой ls -l, выходной поток которой знаком конвейера | направлен на вход команды more. А команда more выводит информацию на экран с временными паузами.
Другие команды при соединении в конвейер позволяют получать результат, который каждая команда в отдельности получить не позволит. Примеры:
Показать общее количество файлов в текущем каталоге: ls –l| wc –l.
Показать общее количество пользователей, работающих в данный момент на ЭВМ: who | we –l.
Показать последние 10 раз, когда заходил в систему пользователь с текущим login’ом «vasjkov»: last vasjkov | head.
Отсортировать список файлов по алфавиту, подготовить его к печати и отпечатать его: sort list | pr | lpr.
Показать состав работающих на ЭВМ пользователей в алфавитном порядке: who | sort.
Достать страницу из справочной системы shell и отправить ее по почте Алексею Васькову: man sh | mail vasjkov.
Сформировать список содержимого текущего каталога, выделить размер каждого файла из списка, список отсортировать по цифрам, показать только последний (а следовательно, наибольший) файл из списка: ls -l | awk ‘ ‘ | sort -n | tail –l.
Файл «textfile» отсортировать и напечатать: sort textfile | lp.
Найти в текущем каталоге файлы, имена которых заканчиваются на 1994, найти в этих файлах слово «profits» и напечатать строки, содержащие это слово. Поиск требуемого слова в файлах произвести командой grep: cat *. 1994 | grep profits | lp.
Выдать на экран список файлов текущего каталога (команда list) в 4 колонки (опция -4 команды рг) по 5 строк на странице (опция -l5) и не выдавать заголовок списка и конечное сообщение (опция -t): ls | pr -t -l5 -4.
Сформировать список файлов текущего каталога, преобразовать его в 3 колонки и распечатать: ls | pr -3 | lpr.
Файл «fruits» отсортировать и вывести на экран колонками, как при табуляции: sort fruits | sp.
Определить, кто входит в систему с терминала ttyl5: who |grep ttyl5.
Вывести неповторяющийся список элементов файла animals с указанием числа повторений этих элементов. Такой способностью обладает команда uniq с опцией -с: sort animals | uniq -с.
Найти в телефонном справочнике phone.lst абонента по двум критериям поиска: Тэд, живущий в Лос Анжелесе: grep Ted phone.lst | grep ‘Los Angeles’.
Отформатировать текст из файла text_5 в 2 колонки перед выводом на печать: рr -2 text_5 | lpr.
Перед печатью файл data_15 сначала упорядочить, затем разделить на страницы: sort data 15 | pr | lpr.