Строка1/файл1 -ключ строка2/файл2
В таблице 1.10 приведены некоторые ключи, используемые командой test,предназначенныедля проверки файлов, равенства строк и целых чисел.
Таблица 1.10
Ключи команды test
Выражение | Команда test возвращает 0 (TRUE) , если … | ||
Ключи для проверки файлов | |||
-e file | file существует (вне зависимости от его типа) | ||
-f file | проверяемый file существует и являтся обычным (не каталог и не файл устройства) | ||
-s file | file существует и имеет ненулевой размер | ||
-d file | проверяемый file существует и является директорией (каталог) | ||
-b file | проверяемый file существует и является специальным блочным устройством (CD-ROM, floppy и пр.) | ||
-c file | проверяемый file существует и является символьным устройством (клавиатура, модем, звуковая карта и пр.) | ||
-p file | проверяемый file существует и является именованым каналом | ||
-h file -L file | проверяемый file существует и является символьной ссылкой | ||
-Sfile | проверяемый file существует и является сокетом | ||
-t file | проверяемый file связан с терминальным устройством (является стадартным устройством ввода (stdin, 0) или вывода (stdout, 1)) | ||
-r file | проверяемый file существует и доступен для чтения пользователю, запустившему сценарий | ||
-w file | проверяемый file существует и доступен для записи пользователю, запустившему сценарий | ||
-x file | проверяемый file существует и доступен для выполнения пользователю, запустившему сценарий | ||
-O file | запускающий сценарий является владельцем file | ||
-G file | запускающий сценарий и проверяемый file принадлежат одной группе | ||
-N file | с момента последнего чтения file был изменен | ||
file1 -nt file2 | file1 былизменен ранее, чем file2 | ||
file1 -ot file2 | file1 был изменен позже, чем file2 | ||
file1 -et file2 | file1 является жесткой ссылкой на file2 | ||
Ключи для проверки и сравнения строк
| |||
-z string | string имеет длину, равную нулю | ||
-n string | string имеет длину, отличную от нуля | ||
string1 = string2 string1 == string2 | string1 и string2 лексикографически равны | ||
string1 != string2 | string1 и string2 лексикографически не равны | ||
string1 < string2 | string1 лексикографически меньше string2 (то есть string1 и string2 отсортированы в порядке лексикографического возрастания) | ||
string1 > string2 | string1 лексикографически больше string2 (то есть string1 и string2 отсортированы в порядке лексикографического убывания) | ||
Ключи для сравнения целых чисел | |||
n1 –eq n2 | числа n1 и n2 алгебраически эквивалентны | ||
n1 –ne n2 | числа n1 и n2 алгебраически не эквивалентны | ||
n1 –gt n2 | число n1 алгебраически больше, чем число n2 | ||
n1 –ge n2 | число n1 алгебраически больше или эквивалентно числу n2 | ||
n1 –lt n2 | число n1 алгебраически меньше, чем число n2 | ||
n1 –le n2 | число n1 алгебраически меньше или эквивалентно числу n2 |
Результат проверки команды test может быть инвертирован при помощи использования символа ! , который изменяет результат тестирования: в случае успешной проверки код возврата будет равен 1 (FALSE – ложь).
|
|
Команда тестирования, представленная [ ] , имеет расширенный вариант:
[[ ]]
Внутри [[ ]] разрешено использование операторов && (логическое И), || (логическое ИЛИ), которые недопустимы в [ ].
Выражения в команде test могут комбинироваться с помощью следующих операций:
-а – логическое И;
-о – логическое ИЛИ.
Ниже приведены некоторые примеры использования команды test.
$ [ -s file.txt ] | проверка, что file.txt не пустой; |
$ [ str1 = str2 ] | проверка, что строки str1 и str2 совпадают; |
$ [ x –le y ] | проверка, что x меньше или равно y. |
Обработка арифметических, логических и строковых выражений
Команда expr
Команда expr применяется в основном для вычисления выражений, но может быть применена и для обработки строк. Результат работы команды выводится на стандартный вывод stdout. Операнды выражения должны быть разделены пробелами, а метасимволы должны быть экранированы.
Команда имеет следующую структуру
expr< вычисляемое выражение >
В таблице 1.11 приведено описание операторов, используемых в команде expr (некоторые операторы экранированы).
|
|
Таблица 1.11
Операции команды expr
Оператор | Описание |
< выр1 > \| < выр2 > | Если <выр1> не пустое и не нулевое, то возвращает его, иначе возвращает <выр2> |
< выр1 > \& < выр2 > | Если оба выражение непустые и ненулевые, то возвращает <выр1>, иначе возвращает 0 |
< выр1 > = < выр2 > < выр1 > \> < выр2 > < выр1 > \>= < выр2 > < выр1 > \< < выр2 > < выр1 > \<= < выр2 > < выр1 > != < выр2 > | Возвращает результат целочисленного сравнения если оба выражения – целые; иначе возвращает результат лексического сравнения |
< выр1 > + < выр2 > < выр1 > - < выр2 > | Сложение и вычитание целочисленных аргументов |
< выр1 > \* < выр2 > < выр1 > / < выр2 > < выр1 > % < выр2 > | Умножение, деление и получение остатка от деления целочисленных аргументов |
< выр1 > : < рег > | Оператор сопоставления сопоставляет первый аргумент со вторым, который должен быть регулярным выражением. Обычно оператор сравнения возвращает число символов, удовлетворяющих образцу (0 при неудачном сравнении). Символы \( и \) могут применяться для выделения части первого аргумента |
Ниже приведены некоторые примеры работы команды expr.
|
|
$ expr "$ Var_name" + 10 | Если в переменной $ Var_name находится строка, состоящая из цифр, вернет значение записанного числа, увеличенного на 10, в противном случае укажет на ошибку. |
$ expr "$ Var_name" : '.*' | Возвращает количество символов в переменной Var_name; если $ Var_name=abсd, команда вернет 4; |
$ expr “$filename” : '\(.*\).txt' | Возвращает имя файла без расширения. Если значение переменной $filename=abc.txt, то функция вернет значение abc; если файл имеет расширение .doc, то функция вернет пустую строку, так как не найдет обязательный фрагмент .txt в имени файла. |
Команда expr возвращает собственный код завершения. Команда возвращает код, равный 1, если результат проверки – истина, любое другое значение – в противном случае (следует обратить внимание, что эти коды обратны кодам завершения последней команды, заносимым в переменную ?).
Например, проверка равенства строки "Hello" переменной H="Hello" даст следующий результат:
$ H= " Hello "
$ expr $H = " Hello "
1
$ echo $?
0
$ expr $H = "Not"
0
$ echo $?
1
Команда let
Команда let производит арифметические операции над переменными и числами. В большинстве случаев, ее можно считать упрощенным вариантом команды expr.
В таблице 1.12 приведены некоторые операторы, использованные в команде let.
Таблица 1.12
Дата добавления: 2020-01-07; просмотров: 202; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!