Строка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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!
