Уильям Шоттс - Командная строка Linux. Полное руководство
- Название:Командная строка Linux. Полное руководство
- Автор:
- Жанр:
- Издательство:Питер
- Год:2016
- ISBN:978-5-496-02303-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Уильям Шоттс - Командная строка Linux. Полное руководство краткое содержание
Книга Уильяма Шоттса "Командная строка Linux: Полное руководство" представляет обширный обзор «жизни» в командной строке Linux. В отличие от других книг, посвященных одной программе, такой как командный интерпретатор bash, в этой книге автор попытается рассказать, как поладить с интерфейсом командной строки в более широком аспекте. Как он работает? Что можно сделать с его помощью? Как лучше его использовать? Эта книга не об администрировании системы Linux. Эта книга исключительно о Linux.
В книге материал излагается в тщательно выверенной последовательности, как в школе, где учитель руководит вами и направляет вас по правильному пути. Многие авторы грешат тем, что подают материал в «систематическом» порядке, имеющем определенный смысл для писателя, но способном вызывать путаницу у начинающих пользователей. Цель данной книги — познакомить вас с идеологией Unix, которая отличается от идеологии Windows.
Командная строка Linux. Полное руководство - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Вне всяких сомнений, чаще всего с инструкцией if используется команда test. Команда test может выполнять различные проверки и сравнения. Она имеет две эквивалентные формы:
test выражение
и более популярную
[ выражение ]
где выражение возвращает истинное (true) или ложное (false) значение. Команда test возвращает код завершения 0, если выражение истинно, и код завершения 1, если выражение ложно.
Выражения для проверки файлов
В табл. 27.1 перечислены выражения, используемые для проверки файлов.
Таблица 27.1. Выражения для проверки файлов
Выражение |
Истинно, если... |
файл1 -ef файл2 |
файл1 и файл2 имеют одно и то же число индексного узла (inode; то есть два имени принадлежат жестким ссылкам, ссылающимся на один и тот же файл) |
файл1 -nt файл2 |
файл1 новее файла файл2 |
файл1 -ot файл2 |
файл1 старше файла файл2 |
-b файл |
файл существует и является специальным файлом блочного устройства |
-с файл |
файл существует и является специальным файлом символьного устройства |
-d файл |
файл существует и является каталогом |
-e файл |
файл существует |
-f файл |
файл существует и является обычным файлом |
-g файл |
файл существует и имеет атрибут set-group-ID (бит setgid) |
-G файл |
файл существует и принадлежит действующей группе |
-k файл |
файл существует и имеет атрибут «sticky bit» |
-L файл |
файл существует и является символической ссылкой |
-O файл |
файл существует и принадлежит действующему пользователю |
-p файл |
файл существует и является именованным каналом |
-r файл |
файл существует и доступен для чтения (имеет разрешение на чтение для действующего пользователя) |
-s файл |
файл существует и имеет размер больше нуля |
-S файл |
файл существует и является сетевым сокетом |
-t дескриптор_файла |
дескриптор_файла представляет файл, подключенный к терминалу. Это выражение можно использовать для проверки стандартных потоков ввода/вывода/ошибок |
-u файл |
файл существует и имеет атрибут setuid |
-w файл |
файл существует и доступен для записи (имеет разрешение на запись для действующего пользователя) |
-x файл |
файл существует и доступен для выполнения (имеет разрешение на выполнение для действующего пользователя) |
Следующий сценарий демонстрирует применение некоторых выражений с файлами:
#!/bin/bash
# test-file: проверка файла
FILE=~/.bashrc
if [ -e "$FILE" ]; then
if [ -f "$FILE" ]; then
echo "$FILE is a regular file."
fi
if [ -d "$FILE" ]; then
echo "$FILE is a directory."
fi
if [ -r "$FILE" ]; then
echo "$FILE is readable."
fi
if [ -w "$FILE" ]; then
echo "$FILE is writable."
fi
if [ -x "$FILE" ]; then
echo "$FILE is executable/searchable."
fi
else
echo "$FILE does not exist"
exit 1
fi
exit
Сценарий проверяет файл, имя которого присвоено константе FILE, и выводит результат. Этот сценарий имеет две интересные особенности, на которые следует обратить внимание. Во-первых, отметьте, что параметр $FILE внутри выражений заключен в кавычки. Это не является обязательным требованием, но защищает от случаев, когда параметр пуст. Если механизм подстановки заменит $FILE пустым значением, это приведет к ошибке (операторы в этом случае будут интерпретироваться как непустые строки, а не как операторы). Использование кавычек гарантирует, что за оператором всегда будет следовать строка, даже если она пустая. Во-вторых, обратите внимание на команду exit (в конце сценария). Команда exit принимает единственный необязательный аргумент, определяющий код возврата сценария. В отсутствие аргумента exit вернет значение по умолчанию 0. Такое использование exit позволит сценарию сообщить об ошибке, если в $FILE содержится имя несуществующего файла. Команда exit в самом конце сценария добавлена исключительно для формальности. Когда командная оболочка достигает конца сценария (то есть конца файла), она в любом случае завершает выполнение сценария с кодом завершения 0.
Аналогично, функции могут возвращать свой код завершения, передавая целочисленный аргумент команде return. Чтобы преобразовать сценарий, приведенный выше, в функцию для использования в больших программах, нужно заменить команды exit инструкциями return:
test_file () {
# test-file: проверка файла
FILE=~/.bashrc
if [ -e "$FILE" ]; then
if [ -f "$FILE" ]; then
echo "$FILE is a regular file."
fi
if [ -d "$FILE" ]; then
echo "$FILE is a directory."
fi
if [ -r "$FILE" ]; then
echo "$FILE is readable."
fi
if [ -w "$FILE" ]; then
echo "$FILE is writable."
fi
if [ -x "$FILE" ]; then
echo "$FILE is executable/searchable."
fi
else
echo "$FILE does not exist"
return 1
fi
}
Выражения для проверки строк
В табл. 27.2 перечислены выражения, используемые для проверки строк.
Таблица 27.2. Выражения для проверки строк
Выражение |
Истинно, если... |
строка |
Cтрока не пустая |
-n строка |
Длина строки больше нуля |
-z строка |
Длина строки равна нулю |
строка1 = строка2 строка1 == строка2 |
строка1 и строка2 равны. Допускается использовать один или два знака «равно», но предпочтительнее два |
строка1 != строка2 |
строка1 и строка2 не равны |
строка1 > строка2 |
строка1 больше, чем строка2, в смысле алфавитной сортировки |
строка1 < строка2 |
строка1 меньше, чем строка2, в смысле алфавитной сортировки |
ВНИМАНИЕ
При использовании с командой test операторы > и < необходимо заключать в кавычки (или экранировать символом обратного слеша). Если этого не сделать, они будут интерпретироваться командной оболочкой как операторы перенаправления, что может привести к плачевным результатам. Обратите также внимание: в документации к командной оболочке bash утверждается, что порядок сортировки соответствует порядку алфавитной сортировки, определяемому текущими региональными настройками, но в действительности это не так. В версиях bash, вплоть до 4.0, используется порядок сортировки ASCII (POSIX).
Следующий сценарий демонстрирует применение выражений для проверки строк:
#!/bin/bash
# test-string: проверка значения строки
ANSWER=maybe
if [ -z "$ANSWER" ]; then
echo "There is no answer." >&2
exit 1
fi
if [ "$ANSWER" == "yes" ]; then
echo "The answer is YES."
elif [ "$ANSWER" == "no" ]; then
echo "The answer is NO."
elif [ "$ANSWER" == "maybe" ]; then
echo "The answer is MAYBE."
else
echo "The answer is UNKNOWN."
fi
В этом сценарии определяется константа ANSWER. Сначала сценарий проверяет, не является ли строка пустой. Если строка пустая, сценарий завершается с кодом 1. Обратите внимание на оператор перенаправления в команде echo. Он перенаправляет сообщение об ошибке «There is no answer» («Нет ответа») в стандартный вывод ошибок как «наиболее подходящий» для сообщений об ошибках. Если строка не пустая, сценарий сравнивает ее значение со строками «yes», «no» или «maybe». Проверки выполняются с использованием инструкции elif, которая является краткой формой записи для else if. Инструкция elif позволяет конструировать более сложные логические проверки.
Читать дальшеИнтервал:
Закладка: