В предыдущей части серии «Начало работы со сценариями» мы рассмотрели использование оператора if в Bash для сравнения и его использования для управления ходом выполнения программы. В этой статье мы рассмотрим различные типы сравнения, которые вы можете выполнять в Bash, и то, как это сделать.

Сначала давайте посмотрим на некоторые операторы проверки строк:

= or == is equal to

!= is not equal to

< is less than in ASCII alphabetical order

> is greater than in ASCII alphabetical order

-z test that the string is empty (null)

-n test that a string is not null

Как мы видели в предыдущей статье, формат проверки на равенство выглядит так:

if [ “$string” == “A string” ]

Переменная, используемая для тестирования, должна находиться в кавычках, чтобы при замене переменной Bash ее содержимым она рассматривалась как строка для сравнения. При желании обе стороны могут быть переменными, чтобы можно было сравнить две строковые переменные. Тот же формат также используется для проверки не равно и меньше / больше чем. При тестировании пустой или непустой строки синтаксис немного отличается, поскольку вы тестируете только одно значение:

if [ -z “$string” ]

Теперь давайте посмотрим на некоторые целочисленные (целочисленные) тесты:

-eq is equal to

-ne is not equal to

-lt is less than

-le is less than or equal to

-gt is greater than

-ge is greater than or equal to

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

if [ “$number” -eq “4” ]

if [ “$number” -gt “23” ]

Наконец, у нас есть несколько удобных операторов тестирования файлов:

-e Does a file exist

-f test if a file

-d test if a directory

-L test if a symbolic link

-N if a file was modified after it was last read

-O if the current user owns the file

-G if the file’s group id matches the current user’s

-s test if a file has a size greater than 0

-r test if the file has read permission

-w test if the file has write permission

-x test if the file has execute permission

Все они могут использоваться так же, как тест -z для строки. Для них переменная, которую вы должны предоставить. Если вам нужен обратный тест, то в тест можно включить восклицательный знак, чтобы инвертировать его.

if [ -e “/home/myuser/myfile” ]

if [ ! -e “/home/myuser/myfile” ]

Итак, первая строка верна, если файл «/ home / myuser / myfile» существует, вторая строка верна, если нет.

У нас также есть несколько сравнительных тестов файлов:

-nt tests if the file on the left is newer than the file on the right

-ot tests if the file on the left is older than the file on the right

-ef tests if both files are hard links to the same file

Они используются аналогично предыдущим тестам на равенство, поэтому вот пример:

if [ “$file” -nt “/home/myuser/myfile”]

if [ “$file” -ef “$otherfile” ]

Мы рассмотрели основные операторы сравнения, которые могут вам понадобиться. Как обычно, это не исчерпывающий список, и есть еще несколько операторов (в основном для тестов альтернативных типов файлов), которые доступны при необходимости. Это должно служить удобным справочником для большинства операций сравнения, которые вам понадобятся для начала работы. В следующем посте мы рассмотрим другой метод управления потоком программы: циклы.

Никогда не пропустите ни одного поста. Подпишитесь на еженедельную новостную рассылку объемом 100 ТБ и подписывайтесь на нас в Facebook и Twitter.

Первоначально опубликовано на blog.100tb.com.