Команда test

Предназначена для проверки типа файла и сравнения чисел и строк. Возвращает код возврата 0 (истина) или 1 (ложь) в зависимости от вычисления выражения. Выражения могут быть как унарными, так и бинарными.




test выражение




Для сокращения кода сценария используют парный оператор [ как синоним test. Парный оператор требует пробела между скобками потому, что [ (скобка) является командой оболочки.




Проверка типа файла




  • -d file — истина, если file существует и является каталогом



  • -e file — истина, если file существует



  • -f file — истина, если file существует и является обычным файлом



  • -r file — истина, если file существует и доступен для чтения



  • -s file — истина, если file существует и имеет размер больше, чем ноль



  • -w file — истина, если file существует и доступен для записи



  • -x file — истина, если file существует и доступен для выполнения



  • -L file — истина, если file существует и является символьной ссылкой



  • file1 -nt file2 — истина, если file1 новее (дата модификации), чем file2



  • file1 -ot file2 — истина, если file1 старее, чем file2




#!/bin/bash
if [ -f "$HOME/.bashrc" ]; then
    echo "Файл существует!"
else
    echo "Файл не существует!"
fi




Сравнение строк




  • -z string — истина, если длина string равна нулю



  • -n string — истина, если длина string не ноль



  • string1 = string2 — истина, если строки равны



  • string1 != string2 — истина, если строки не равны




Сравнение целых чисел




  • число1 -eq число2 — истина, если число1 равно число2



  • число1 -gt число2 — истина, если число1 больше число2



  • число1 -ge число2 — истина, если число1 больше или равно число2



  • число1 -lt число2 — истина, если число1 меньше число2



  • число1 -le число2 — истина, если число1 меньше или равно число2



  • число1 -ne число2 — истина, если число1 не равно число2




#!/bin/bash
if [ 3 -lt 6 ]; then
    echo "Истина"
else
    echo "Ложь"
fi




Операции AND и OR




  • expr1 -a expr2 — истина, если оба выражения expr1 и expr2 истина (операция AND)



  • expr1 -o expr2 — истина, если хотя бы одно из выражений expr1 или expr2 истина (операция OR)



  • ! expr — истина, если выражение expr ложно




В условном выражении команды test можно использовать круглые скобки, чтобы изменить порядок вычисления, но их нужно экранировать:




$ [ ( "$count" -ge 0 ) -a ( "$count" -lt 10 ) ]




«[[…]]» — расширенный вариант от «[…]», оболочка выполняет его как один элемент с кодом возврата. Внутри «[[…]]» разрешается выполнение операторов &&|| которые приводят к ошибке в обычных скобках «[…]».




#!/bin/bash
if [[ -f "$HOME/.bashrc" && -f "/usr/bin/nano" ]]; then
    echo "Все в порядке, можно редактировать!"
else
    echo "Ошибка!"
fi



2022-11-10T13:34:12
Утилиты командной строки