Условия и команда test

Последнее обновление: 23.03.2024

Команда test

Команда test проверяет соответствие некоторому условию. Она принимает следующие формы:

  • test -e $1: проверяет, является ли $1 файлом.

  • test -f $1: проверяет, является ли $1 обычным файлом, а не файлом устройства, каталогом или исполняемым файлом.

  • test -d $1: проверяет, является ли $1 каталогом.

  • test -x $1: проверяет, является ли $1 исполняемым файлом. Обратите внимание, что вы также можете проверить другие разрешения. Например, -g проверит, установлено ли разрешение SGID.

  • test $1 -nt $2: проверяет, является ли $1 новее, чем $2.

  • test $1 -ot $2: проверяет, старше ли $1, чем $2.

  • test $1 -eq $2: проверяет, равны ли числа $1 и $2.

  • test $1 -ne $2: проверяет, не равны ли числа $1 и $2.

  • test $1 -gt $2: проверяет, является ли число $1 больше числа $2.

  • test S1 -lt $2: проверяет, является ли число $1 меньше числа $2.

  • test $1 -ge $2: проверяет, является ли число $1 большим или равным числу $2.

  • test $1 -le $2: проверяет, является ли число $1 меньшим или равным числу $2.

  • test -z $1: проверяет, определена ли переменная $1

  • test $1: проверяет, определена ли переменная $1.

  • test $1=$2: проверяет, совпадают ли строки $1 и $2. Применяется для сравнения значений двух переменных.

  • test $1 != $2: проверяет, не равны ли строки $1 и $2. Также можно использовать ! со всеми другими командами test, а также для проверки отрицания утверждения.

Также для проверки условий можно использовать сокращенную форму, при которой вся команда помещается в квадратные скобки, а слово "test" опускается. Например, вместо test -f $1 пишется [ -f $1 ] (обратите внимание на пробелы после открывающей и перед закрывающей скобками).

Объединение условий

С помощью специальных операторов && и || можно объединять несколько условий в одно и составлять более сложные, комплексные условия. Они имеют следующий формат:

команда1 && команда2
команда1 || команда2

Если используется &&, то вторая команда выполняется только в том случае, если первая команда выполнена успешно. Если используется ||, то вторая команда выполняется только в том случае, если первую команду не удалось выполнить. Причем операнды этих операций представляют команды (любые). Однако нередко в качестве такого выступает условие команды test

Например, с помощью следующего условия можно узнать, является ли $path файлом, и вывести сообщение:

[ -f $path ] && echo $path is a file

Соответственно обратное условие выглядело бы так:

[ -f $path ] || echo $path is not a file

Полный пример

eugene@Eugene:~$ path=~/Documents/hello.txt
eugene@Eugene:~$ [ -f $path ] && echo $path is a file
/home/eugene/Documents/hello.txt is a file
eugene@Eugene:~$ path=~/Documents/
eugene@Eugene:~$ [ -f $path ] && echo $path is a file
eugene@Eugene:~$ [ -f $path ] || echo $path is not a file
/home/eugene/Documents/ is not a file
eugene@Eugene:~$ 

Операторы && и || также могут объединять простые команды, необязательно условия. Например:

eugene@Eugene:~$ echo "hello" && echo "world"
hello
world
eugene@Eugene:~$ 

Здесь объединены две команды echo. Причем действие оператора && таково, что вторая команда echo "world" выполняется, если успешно выполнена первая

Другой пример:

eugene@Eugene:~$ mkdir ~/Documents/test3 && echo "Folder created"
Folder created
eugene@Eugene:~$ 

Здесь вторая команда, которая выводит сообщение, выполняется, если успешно создана папка /Documents/test3 в домашнем каталоге пользователя. Но если папку не удастся создать, то вторая команда не выполняется:

eugene@Eugene:~$ mkdir ~/Documents/test3 && echo "Folder created"
mkdir: cannot create directory \‘/home/eugene/Documents/test3\’: File exists

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

Оператор || выполняет вторую команду, если не удалось выполнить первую. Например:

eugene@Eugene:~$ mkdir ~/Documents/test3 || echo "Unable to create a folder"
mkdir: cannot create directory \‘/home/eugene/Documents/test3\’: File exists
Unable to create a folder
eugene@Eugene:~$ 

Фактически это предыдущий пример, где опять же не удается создать папку в каталоге root. Но поскольку первая команда завершается неудачей, то выполняется вторая команда, которая выводит соответствующее сообщение.

И также мы могли бы комбинировать оба оператора для создания более сложных условий:

eugene@Eugene:~$ mkdir ~/Documents/test4 && echo "Folder created" || echo "Unable to create a folder"
Folder created
eugene@Eugene:~$ mkdir ~/Documents/test4 && echo "Folder created" || echo "Unable to create a folder"
mkdir: cannot create directory \‘/home/eugene/Documents/test4\’: File exists
Unable to create a folder
eugene@Eugene:~$ 

То есть здесь у нас объединяются три команды. Первая команда выполняет создание папки:

mkdir ~/Documents/test4

Если папка была создана успешно, то выполняется вторая команда

echo "Folder created"

Если же при создании папки произошла ошибка, то выполняется третья команда

echo "Unable to create a folder"
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850