Bash: Проверка Существования Файла

В процессе написания bash скриптов, довольно часто возникает необходимость проверить существует ли как-то файл прежде чем предпринимать какие-либо действия.

Эта работа для команды test, которая позволяет узнать существует ли файл и какого он типа.

По окончанию проверки команда test устанавливает код завершение равным 0 (TRUE — правда) или 1 (FALSE — ложь) в зависимости от того, чем окончился тест.

Также команда test имеет логический оператор отрицания, который позволяет получить утвердительный ответ TRUE при проверки утверждения что файл не существует.

Дельный Совет: Сделайте bash скрипт умнее! Пусть он делает больше тестов! Проверьте содержится ли в файле определенная строка! Читать далее →

Bash: Проверка Существования Файла из Командной Строки

Выполните одну из приведенных ниже команд, чтобы проверить существует ли файл FILENAME:

$ test -f FILENAME

– или –

$ [ -f FILENAME ]

Существует ли файл /etc/passwd (TRUE — правда):

$ test -f /etc/passwd
$ echo $?
0

$ [ -f /etc/passwd ]
$ echo $?
0

Существует ли файл /etc/bebebe (FALSE — ложь):

$ test -f /etc/bebebe
$ echo $?
1

$ [ -f /etc/bebebe ]
$ echo $?
1

Проверьте обратное утверждение, что файл /etc/bebebe не существует (TRUE — правда):

$ test ! -f /etc/bebebe
$ echo $?
0

$ [ ! -f /etc/bebebe ]
$ echo $?
0

Если Файл Существует, То …

Само собой разумеется, что у нас есть причина по которой нам необходимо проверить существует ли файл.

Обычно мы проверяем существование файла для того, чтобы выполнить какое-то действия по результатам проверки.

Возможно, если файл не существует, то вообще не имеет смысла продолжать и необходимо прервать выполнение скрипта или что-то вроде того.

В следующих примерах напечатаем соответствующие сообщения по результатам выполнения команды test.

Дельный Совет: Конструкция CASE — это простейшая форма конструкции IF-THEN-ELSE! Если у вас много ELIF элементов — то лучше использовать CASE! Читать далее →

Проверить существует ли файл /etc/passwd и напечатать сообщение если это правда (TRUE):

$ if [ -f "/etc/passwd" ]; then echo "Файл существует"; fi
Файл существует

Проверить не существует ли файл /etc/bebebe и напечатать сообщение если это правда (TRUE):

$ if [ ! -f "/etc/bebebe" ]; then echo "Файл не существует"; fi
Файл не существует

Проверить существует ли файл и напечатать соответствующее сообщение в каждом из случаев:

$ [ -f "/etc/passwd" ] && echo "Файл существует" || echo "Файл не существует"
Файл существует
$ [ -f "/etc/bebebe" ] && echo "Файл существует" || echo "Файл не существует"
Файл не существует

Bash Script: Существует ли Файл?

Создадим bash скрипт, которому будем передавать в качестве аргумента путь к файлу, а он будет проверять существует ли этот файл и выводить соответствующее сообщение.

Создайте пустой файл checkfile.sh с помощью команды touch checkfile.sh.

Сделайте его исполняемым chmod +x checkfile.sh.

Откройте checkfile.sh в текстовом редакторе и скопируйте следующий код:

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

Дельный Совет: Хороший bash скрипт должен печатать соответствующее сообщение и прерываться если ему не переданы необходимые аргументы! Это очень легко настроить! Читать далее →

Сохраните и выполните скрипт:

$ ./checkfile.sh /etc/bebebe
Файл '/etc/bebebe' не найден.
$ ./script.sh /etc/passwd
Файл '/etc/passwd' существует.

Проверить Что Файл Существует И Он …

В показных выше примерах с помощью ключа -f мы только проверяли существует ли файл и является ли он обыкновенным файлом.

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

Опция Описание
-e Файл существует
-f Файл существует и это обычный файл
-r Файл существует и он доступен для чтения
-w Файл существует и он доступен для записи
-x Файл существует и он исполняемый
-L Файл существует и это символьная ссылка
-S Файл существует и это сокет
-d Директория существует

Выполните man test чтобы ознакомиться со всеми доступными опциями.

2 Replies to “Bash: Проверка Существования Файла”

  1. very helpful) Great job!!!!

Добавить комментарий