Поиск по сайту:

Bash if –e и –s и другие операторы проверки файлов


В файлах Linux тестовые операторы используются для проверки атрибутов, связанных с файлом, таких как: автор файла, административные права и право собственности на файл, а также для проверки того, являются ли они символическими ссылками или нет. Когда мы имеем дело с файлами, возникает необходимость проверить их существование и наличие в них какого-либо содержимого для этой цели; или если инструкция используется вместе с тестовыми операторами.

Операторы проверки файлов в bash также используются для проверки файлов, как следует из названия. С помощью этих операторов мы можем проверить различные аспекты файла, например, доступен ли этот файл только для записи или чтения. Существует множество операторов проверки файлов, и у каждого из них своя роль и назначение. Операторы проверки файлов помогают нам предотвратить ошибки при написании сценариев в Bash. Для выполнения этой задачи мы используем оператор if-else. Оператор if-else действует как очень полезный инструмент для обработки ошибок в сценариях Bash.

Цель оператора «-e» — сообщить нам, существует ли файл в указанном каталоге или нет. Оператор «-s» говорит нам, что файл не имеет нулевого размера, что означает, что этот оператор сообщает нам, содержит ли файл в указанном каталоге какие-либо данные или нет. Другие операторы используются для работы с файлами, но «-e» и «-s» являются наиболее важными и часто используются.

Как использовать тестовые операторы:

На этой иллюстрации мы попытаемся использовать все операторы тестирования для выполнения различных задач над файлами.

Пример № 1: Использование текстового оператора if –e

В этом примере мы попытаемся использовать оператор проверки if –e, который в основном используется для проверки того, существует ли файл в каталоге или нет. Теперь мы сначала создадим новый файл.

linux@linux-Virtualbox:~$ nano testoperator.sh

Когда мы запустим приведенную выше команду, она откроет пустой файл, теперь мы напишем код, в котором мы создадим условие существования файла «employee.txt», он отобразит команду эха, содержащую сообщение «Файл существует». В противном случае будет выполнено сообщение «Файл не существует». Файл testoperator будет содержать содержимое, указанное ниже.

#!/bin/sh
file="employee.txt"
if [ -e $file ]
then
   echo "File exists"
else
   echo "The file does not exist"
fi

После сохранения файла с помощью команды bash мы запустим указанную ниже команду, которая выполнит файл testoperator.sh.

linux@linux-Virtualbox:~$ bash testoperator.sh

Когда мы запустим указанную выше команду, она прочитает код файла testoperator, который выполняется, и проверит наличие файла в домашнем каталоге. В этом случае у нас нет файла в каталоге, поэтому он выполнил приведенный ниже вывод.

Вывод:

The file does not exist

Теперь мы сначала создадим новый файл с именем «employee.txt». Затем снова запустите команду, чтобы проверить, обнаружит ли она файл или нет. Как показано ниже, на этот раз файл существует в домашнем каталоге.

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

Вывод:

File exists

Пример № 2: Использование текстового оператора if –d

В этом примере мы попробуем другой тестовый оператор, который является оператором «-d», который используется для проверки того, является ли проверяемый файл каталогом или нет. На этот раз мы создадим новый каталог, который мы назвали «employee», как видно из приведенного ниже фрагмента.

Теперь мы изменим файл «testoperator.sh», в котором мы изменим имя файла «employee.txt» на просто «employee». Затем, передав оператор «-d» в операторе if вместе с «$file», который будет извлечен. И изменив сообщение, которое будет отображаться в качестве вывода, мы сохраним файл. Теперь файл «testoperator.sh» содержит следующее содержимое.

#!/bin/sh
file="employee”
if [ -d $file ]
then
   echo "
The employee is a directory"
else
   echo "
The employee is not a directory "
fi

После изменения «testoperator.sh» мы запустим команду bash вместе с именем файла:

linux@linux-Virtualbox:~$ bash testoperator.sh

Когда приведенная выше команда будет выполнена, она отобразит вывод, показанный ниже, в котором будет напечатано следующее сообщение:

Вывод:

The employee is a directory

Пример № 3: Использование текстового оператора if –s

В этом примере мы попытаемся использовать оператор «-s», который используется для проверки того, содержит ли файл какой-либо контент или нет. Для этого мы будем использовать уже созданный файл, который мы использовали в примере 1, с именем «employee.txt». Давайте сначала изменим файл testoperator.sh, в котором мы передадим параметр «-s» вместе с именем файла в наш оператор if и назначим файл «employee.txt». Кроме того, это изменит сообщение, которое будет отображаться в качестве вывода.

#!/bin/sh
file="employee.txt”
if [ -d $file ]
then
   echo "
employee.txt is empty"
else
   echo "
employee.txt is not empty"
fi

Теперь мы сохраним и закроем файл «testoperator.sh» и запустим в терминале указанную ниже команду.

linux@linux-Virtualbox:~$ bash testoperator.sh

Когда приведенная выше команда запустится, она выполнит оператор else, поскольку файл employee.txt содержит содержимое. Таким образом, он игнорирует эхо-команду then.

Вывод:

employee.txt is not empty

Теперь мы удалим содержимое из «employee.txt», а затем снова запустим команду. Когда приведенная выше команда выполняется еще раз, она отображает сообщение с операторами then, поскольку оно не содержит в себе никакого содержимого. В приведенном ниже примере показан вывод команды, которую мы выполнили после удаления содержимого файла.

Вывод:

employee.txt is empty

Пример № 4: Использование текстового оператора if –r

В этом примере мы реализуем еще один тестовый оператор — «-r». Этот оператор используется для проверки того, доступен ли файл для чтения пользователю или нет. Для этого изменим файл testoperator.txt, заменив оператор «-d» на «-r». Это также изменит выходное сообщение, если файл доступен для чтения. Он отобразит сообщение «employee.txt доступен для чтения, и если файл не читается, он отобразит оператор else. Теперь «testoperator.txt» содержит следующее содержимое:

#!/bin/sh
file=”employee.txt”
if [ -r $file ]
then
   echo “employee.txt is readable”
else
   echo “ employee.txt is readable “
fi

Теперь мы запустим команду ниже, чтобы выполнить код, написанный внутри нее.

linux@linux-Virtualbox:~$ bash testoperator.sh

После выполнения вышеуказанной команды отображаемый ниже вывод будет напечатан на терминале.

Вывод:

employee.txt is readable

Заключение

Мы обсудили самую важную часть файловой системы, операторов тестирования. При работе с файлами операторы тестирования являются наиболее важной утилитой, предоставляемой пакетами Linux. Ознакомившись с назначением тестовых операторов, мы объяснили их, реализовав эти операторы на различных примерах.

Статьи по данной тематике: