Введение
В этом сеансе мы рассмотрели расширение оболочки, внимательно изучив команды и аргументы. Знание расширения оболочки важно, потому что многие команды в вашей системе Linux обрабатываются и, скорее всего, изменяются оболочкой до их выполнения.
Интерфейс командной строки или оболочка, используемые в большинстве систем Linux, называются bash, что означает для Борна снова оболочка. Оболочка bash включает функции sh (исходная оболочка Bourne), csh (оболочка C) и ksh (оболочка Korn).
В этой главе для демонстрации функций оболочки часто используется команда echo. Эхо-команда очень проста: она повторяет полученный ввод.
[email protected]: ~ $ echo BurtonvilleBurtonville [email protected]: ~ $ echo Смурфы синиеSmurfs синие
Одной из основных функций оболочки является выполнение сканирования из командной строки. Когда вы вводите команду в командной строке оболочки и нажимаете клавишу ввода, оболочка начинает сканирование этой строки, разрезая ее на аргументы. При сканировании строки оболочка может вносить множество изменений в набранные вами аргументы.
Этот процесс называется расширением оболочки. Когда оболочка завершит сканирование и изменение этой строки, она будет выполнена.
удаление пробелов
Разделенные части один или несколько последовательных пробелов (или табуляции) считаются отдельными аргументами, любые пробелы удаляются. Первый аргумент — это команда, которую нужно выполнить, остальные аргументы передаются команде. Оболочка эффективно разделяет вашу команду на один или несколько аргументов.
[email protected]: ~ $ echo Моя первая веб-страницаМоя первая веб-страница [защита электронной почты]: ~ $ echo Моя первая веб-страницаМоя первая веб-страница [защищенная электронная почта]: ~ $ echo Моя первая веб-страницаМоя первая веб-страница [защищенная электронная почта]: ~ $ echo Моя первая веб-страницаМоя первая веб-страница
Это объясняет, почему следующие четыре разные командные строки то же самое после shellexpansion.
Команда echo отобразит каждый аргумент, который она получает от оболочки. Эхо-команда также добавит новый пробел между полученными аргументами.
одинарные кавычки
Вы можете предотвратить удаление пробелы путем цитирования пробелов. Содержимое строки в кавычках рассматривается как один аргумент. На скриншоте ниже эхо получает только один аргумент.
[email protected]: ~ $ echo 'Строка с одинарными кавычками' Строка с одинарными кавычками [email protected]: ~ $
двойные кавычки
Вы также можете предотвратить удаление пробелов, заключив пробелы в двойные кавычки. То же, что и выше, echo принимает только один аргумент.
[email protected]: ~ $ echo "Строка с двойными кавычками" Строка с двойными кавычками [email protected]: ~ $
Позже в этом руководстве при обсуждении переменных мы увидим важные различия между одинарными и двойными кавычками..
echo и кавычки
Строки в кавычках могут включать специальные экранированные символы, распознаваемые командой echo (при использовании echo -e). На снимке экрана ниже показано, как использовать n для новой строки и t для табуляции (обычно восемь пробелов).
[email protected]: ~ $ echo -e " Строка с na новой строкой "Строка с новой строкой [защита электронной почты]: ~ $ echo -e 'Строка с na новой строкой'A строка с новой строкой [защита электронной почты]: ~ $ echo -e" Строка с ta tab "Строка с табуляцией [защищена по электронной почте]: ~ $ echo -e 'Строка с ta tab'Строка с табуляцией [защищена по электронной почте]: ~ $
Команда echo может генерировать не только пробелы, табуляции и новые строки. Посмотрите на странице список параметров.
команды
внешние или встроенные команды?
Не все команды являются внешними по отношению к оболочке, некоторые из них встроены. Внешние команды — это программы, которые имеют собственный двоичный файл и находятся где-то в файловой системе. Многие внешние команды расположены в/bin или/sbin. Встроенные команды являются неотъемлемой частью самой программы оболочки.
type
Чтобы узнать, будет ли команда, переданная оболочке, быть выполненным как внешний командир как встроенная команда, используйте команду type.
[email protected]: ~ $ type cdcd - это встроенная оболочка [email protected]: ~ $ введите catcat is/bin/cat
Как видите, команда cd является встроенной, а команда cat — внешней.
Вы также можете использовать эта команда, чтобы показать вам, имеет ли команда псевдоним или нет.
[email protected]: ~ $ type lsls имеет псевдоним `ls --color = auto '
выполнение внешних команд
Некоторые команды имеют как встроенные, так и внешние версии. Когда выполняется одна из этих команд, встроенная версия имеет приоритет. Чтобы запустить внешнюю версию, вы должны ввести полный путь к команде.
[email protected]: ~ $ type -a echoecho - это встроенная оболочкаcho is/bin/echo [ email protected]: ~ $/bin/echo Запуск внешней команды echo ... Запуск внешней команды echo ...
который
Команда which будет искать двоичные файлы в переменной среды $ PATH (переменные будут объяснены позже). На снимке экрана ниже определено, что cd является встроенным, а ls, cp, rm, mv, mkdir, pwd и являются внешними командами.
[email protected] :/$ which cp ls cd mkdir pwd/bin/cp/bin/ls/bin/mkdir/bin/pwd
псевдонимы
создать псевдоним
Оболочка позволяет создавать псевдонимы. Псевдонимы часто используются для упрощения запоминания имени существующей команды или для упрощения ввода параметров..
[защита электронной почты]: ~ $ cat text2applemangobanana [защита электронной почты]: ~ $ alias xyz = tac [защита электронной почты]: ~ $ xyz text2bananamangoapple
сокращать команды
Псевдоним также может быть полезен для сокращения существующей команды.
[защита электронной почты]: ~ $ alias ll = 'ls -lh --color = auto' [защита электронной почты]: ~ $ alias c = 'clear' [защита электронной почты]: ~ $
параметры по умолчанию
Псевдонимы могут использоваться для предоставления команд с параметрами по умолчанию. В приведенном ниже примере показано, как установить параметр -i по умолчанию при вводе rm.
[email protected]: ~ $ rm -i xyz.txtrm: удалить обычный файл? Xyz.txt ?? нет [защита электронной почты]: ~ $ rm xyz.txt [защита электронной почты]: ~ $ ls xyz.txtls: нет доступа к xyz.txt: нет такого файла или каталога [защита электронной почты]: ~ $ touch xyz.txt [защита электронной почты] : ~ $ alias rm = 'rm -i' [защита электронной почты]: ~ $ rm xyz.txtrm: удалить обычный пустой файл? xyz.txt ?? no [email protected]: ~ $
Некоторые дистрибутивы включают псевдонимы по умолчанию для защиты пользователей от случайного стирания файлов (‘rm-i’, ‘mv -i’, ‘cp -i ‘)
просмотр псевдонимов
Вы можете предоставить один или несколько псевдонимов в качестве аргументов для команды alias, чтобы получить их определения. Отсутствие аргументов дает полный список текущих псевдонимов.
[email protected]: ~ $ alias c llalias c = 'clear'alias ll =' ls -lh --color = auto '
unalias
Вы можете отменить псевдоним с помощью команды unalias.
[защита электронной почты]: ~ $ which rm/bin/rm [защита электронной почты]: ~ $ alias rm = 'rm -i' [защита электронной почты]: ~ $ which rm/bin/rm [защита электронной почты]: ~ $ unalias rm [защита электронной почты]: ~ $ which rm/bin/rm [защита электронной почты]: ~ $
отображение расширения оболочки
Вы можете отобразить расширение оболочки с помощью set -x и прекратить отображение с помощью set + x. Вы можете захотеть использовать это в дальнейшем в этом руководстве или если сомневаетесь в том, что именно оболочка делает с вашей командой.
[email protected]: ~ $ set -x pran [защита электронной почты]: ~ $ echo $ user + echo [защита электронной почты]: ~ $ echo $ user + echo '$ user' $ user [защита электронной почты]: ~ $ set -x pran + set -x pran [защита электронной почты]: ~ $ echo $ user + echo '$ user' $ user [защита электронной почты]: ~ $ set + x + set + x [защита электронной почты]: ~ $ echo $ user $ user [защита электронной почты]: ~ $
Упражнение, практика и решение:
1. Сколько аргументов в этом строку (не считая самой команды).
touch ‘/etc/cron/cron.allow’ ‘abc123.txt’ «abc456.txt»
Код:
touch '/etc/cron/cron.allow' 'abc123.txt' "abc456.txt" ответ: три
2. Является ли tac встроенной командой оболочки?
Код:
Да. введите tac
3. Есть ли существующий псевдоним для rm?
Код:
alias rm
4. Прочтите страницу руководства rm, убедитесь, что вы понимаете параметр -i для rm. Создайте и удалите файл, чтобы проверить параметр -i.
Код:
man rmtouch testfilerm - i testfile
5. Выполнить: alias rm = ‘rm -i’. Проверьте свой псевдоним с помощью тестового файла. Работает ли это должным образом?
Код:
touch testfilerm testfile (должен запросить подтверждение)
6. Список всех текущих псевдонимов.
Код:
alias
7. Создайте псевдоним под названием «city», который повторяет ваш родной город.
Код:
alias city = 'echo Antwerp'
8. Используйте свой псевдоним, чтобы проверить, что он работает.
Код:
city (он должен отображать Антверпен
9. Выполните set -x, чтобы отобразить расширение оболочки для каждой команды.
Код:
set -x
10. Протестируйте функциональность set + x, выполнив псевдонимы city и rm.
Код:
должна отобразить разрешенные псевдонимы, а затем выполнить команду: datasoft @ da tasoft-linux ~ $ set + xdatasoft @ datasoft-linux ~ $ city + echo antwerpantwerp
11. Выполните set + x, чтобы прекратить отображение расширения оболочки .
Код:
set + x
12. Удалите псевдоним города.
Код:
unalias city
13. Каково местоположение команды cat и passwd?
какой кот (вероятно,/bin/cat) с паролем (вероятно,/usr/bin/passwd)
14. Объясните разницу между следующими командами:
echo
/bin/echo
Команда echo будет интерпретироваться оболочкой как встроенная команда echo. Команда/bin/echo заставит оболочку выполнить двоичный файл echo, расположенный в каталоге/bin.
15. Объясните разницу между следующие команды:
echo Hello
echo -n Hello
Код:
Параметр -n команды echo предотвратит повторение эхом завершающей новой строки. echo Hello будет отображать всего шесть символов, echo -n hello отображает только пять символов. (Параметр -n может не работать в оболочке Korn. .)
16. Отобразите ABC с двумя пробелами между B и C.
(необязательно)
Код:
echo "ABC"
17. Выполните следующую команду (не используйте пробелы), чтобы отобразить точно так же быстро, как показано ниже
Пример вывода:
4 + 4 = 8 10 + 14 = 24
Решение состоит в использовании вкладок с t.
4 + 4 = 810 + 14 = 24echo -e "4 + 4 t = 8 дюймов; echo -e "10 + 14 t = 24"
18. Используйте echo для точного отображения следующего:
Код:
?? \ echo '?? \' echo -e '?? \\' echo "?? \\" echo -e "?? \\\" echo ?? \\
19. Используйте одну команду echo для отображения трех слов в трех строках.
Код:
echo -e "один nдва nтри"