Проверка существования файла Bash
В операционных системах GNU/Linux любые объекты системы являются файлами. И проверка существования файла bash — наиболее мощный и широко применяемый инструмент для определения и сравнения в командном интерпретаторе.
В рамках интерпретатора Bash, как и в повседневном понимании людей, все объекты файловой системы являются, тем, чем они есть, каталогами, текстовыми документами и т.д. В этой статье будет рассмотрена проверка наличия файла Bash, а также его проверка на пустоту, и для этого используется команда test.
Проверка существования файла Bash
Начать стоит с простого и более общего метода. Параметр -e позволяет определить, существует ли указанный объект. Не имеет значения, является объект каталогом или файлом.
#!/bin/bash
# проверка существования каталога
if [ -e $HOME ]
then
echo «Каталог $HOME существует. Проверим наличие файла»
# проверка существования файла
if [ -e $HOME/testing ]
then
# если файл существует, добавить в него данные
echo «Строка для существующего файла» >> $HOME/testing
echo «Файл существует. В него дописаны данные.»
else
# иначе — создать файл и сделать в нем новую запись
echo «Файл не существует, поэтому создается.»
echo «Создание нового файла» > $HOME/testing
fi
else
echo «Простите, но у вас нет Домашнего каталога»
fi
Пример работы кода:
Вначале команда test проверяет параметром -e, существует ли Домашний каталог пользователя, название которого хранится системой в переменной $HOME. При отрицательном результате скрипт завершит работу с выводом сообщения об этом. Если такой каталог обнаружен, параметр -е продолжает проверку. На этот раз ищет в $HOME файл testing. И если он есть, то в него дописывается информация, иначе он создастся, и в него запишется новая строка данных.
Проверка наличия файла
Проверка файла Bash на то, является ли данный объект файлом (то есть существует ли файл), выполняется с помощью параметра -f.
#!/bin/bash
if [ -f $HOME ]
then
echo «$HOME — это файл»
else
echo «$HOME — это не файл»
if [ -f $HOME/.bash_history ]
then
echo «А вот .bash_history — файл»
fi
fi
Пример работы кода:
В сценарии проверяется, является ли $HOME файлом. Результат проверки отрицательный, после чего проверяется настоящий файл .bash_history, что уже возвращает истину.
На заметку: на практике предпочтительнее использовать сначала проверку на наличие объекта как такового, а затем — на его конкретный тип. Так можно избежать различных ошибок или неожиданных результатов работы программы.
Проверка файла на пустоту
Чтобы определить, является ли файл пустым, нужно выполнить проверку с помощью параметра -s. Это особенно важно, когда файл намечен на удаление. Здесь нужно быть очень внимательным к результатам, так как успешное выполнение этого параметра указывает на наличие данных.
#!/bin/bash
file=t15test
touch $file
if [ -s $file ]
then
echo «Файл $file содержит данные.»
else
echo «Файл $file пустой.»
fi
echo «Запись данных в $file. »
date > $file
if [ -s $file ]
then
echo «Файл $file содержит данные.»
else
echo «Файл $file все еще пустой.»
fi
Результат работы программы:
В этом скрипте файл создаётся командой touch, и при первой проверке на пустоту возвращается отрицательный результат. Затем в него записываются данные в виде команды date, после чего повторная проверка файла возвращает истину.
Выводы
В статье была рассмотрена проверка существования файла bash, а также его пустоты. Обе функции дополняют друг друга, поэтому использовать их в связке — эффективный приём.
Хороший тон в написании сценариев командного интерпретатора — сначала определить тип файла и его дальнейшую роль в программе, а затем уже проверять объект на существование.
Bash: Проверка Существования Файла
В процессе написания bash скриптов, довольно часто возникает необходимость проверить существует ли как-то файл прежде чем предпринимать какие-либо действия.
Эта работа для команды test , которая позволяет узнать существует ли файл и какого он типа.
По окончанию проверки команда test устанавливает код завершение равным 0 ( TRUE — правда) или 1 ( FALSE — ложь) в зависимости от того, чем окончился тест.
Также команда test имеет логический оператор отрицания, который позволяет получить утвердительный ответ TRUE при проверки утверждения что файл не существует.
Дельный Совет: Сделайте bash скрипт умнее! Пусть он делает больше тестов! Проверьте содержится ли в файле определенная строка! Читать далее →
Bash: Проверка Существования Файла из Командной Строки
Выполните одну из приведенных ниже команд, чтобы проверить существует ли файл FILENAME :
Существует ли файл /etc/passwd ( TRUE — правда):
Существует ли файл /etc/bebebe ( FALSE — ложь):
Проверьте обратное утверждение, что файл /etc/bebebe не существует ( TRUE — правда):
Если Файл Существует, То …
Обычно мы проверяем существование файла для того, чтобы выполнить какое-то действия по результатам проверки.
Возможно, если файл не существует, то вообще не имеет смысла продолжать и необходимо прервать выполнение скрипта или что-то вроде того.
В следующих примерах напечатаем соответствующие сообщения по результатам выполнения команды test .
Дельный Совет: Конструкция CASE — это простейшая форма конструкции IF-THEN-ELSE ! Если у вас много ELIF элементов — то лучше использовать CASE ! Читать далее →
Проверить существует ли файл /etc/passwd и напечатать сообщение если это правда ( TRUE ):
Проверить не существует ли файл /etc/bebebe и напечатать сообщение если это правда ( TRUE ):
Проверить существует ли файл и напечатать соответствующее сообщение в каждом из случаев:
Bash Script: Существует ли Файл?
Создайте пустой файл checkfile.sh с помощью команды touch checkfile.sh .
Сделайте его исполняемым chmod +x checkfile.sh .
Откройте checkfile.sh в текстовом редакторе и скопируйте следующий код:
Дельный Совет: Хороший bash скрипт должен печатать соответствующее сообщение и прерываться если ему не переданы необходимые аргументы! Это очень легко настроить! Читать далее →
Сохраните и выполните скрипт:
Проверить Что Файл Существует И Он …
В показных выше примерах с помощью ключа -f мы только проверяли существует ли файл и является ли он обыкновенным файлом.
Вот еще некоторые полезные ключей, которые помогут проверить существует ли файл и имеет ли он особые права или это символьная ссылка, сокет или директория:
Опция | Описание |
---|---|
-e | Файл существует |
-f | Файл существует и это обычный файл |
-r | Файл существует и он доступен для чтения |
-w | Файл существует и он доступен для записи |
-x | Файл существует и он исполняемый |
-L | Файл существует и это символьная ссылка |
-S | Файл существует и это сокет |
-d | Директория существует |
Выполните man test чтобы ознакомиться со всеми доступными опциями.
Как проверить, существует ли файл или каталог в Bash
Главное меню » Операционная система Linux » Как проверить, существует ли файл или каталог в Bash
В Bash вы можете использовать команду test, чтобы проверить, существует ли файл и определить тип файла.
Команда test принимает одну из следующих синтаксических форм:
Если вы хотите, чтобы ваш скрипт был переносимым, вы должны предпочесть использовать старую тестовую команду [, которая доступна во всех оболочках POSIX. Новая обновленная версия команды test [[(двойные скобки) поддерживается в большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.
Проверьте, существует ли файл
При проверке, существует ли файл, чаще всего используются операторы FILE -e и -f. Первый проверит, существует ли файл независимо от типа, а второй вернет истину, только если ФАЙЛ является обычным файлом (не каталогом или устройством).
Наиболее читаемым вариантом при проверке файла является использование команды test в сочетании с оператором if. Любой из приведенных ниже фрагментов проверит, /etc/resolv.conf существует ли файл:
Если вы хотите выполнить другое действие в зависимости от того, существует файл или нет, просто используйте конструкцию if/then:
Всегда используйте двойные кавычки, чтобы избежать проблем при работе с файлами, содержащими пробелы в своих именах.
Вы также можете использовать команду test без оператора if. Команда после оператора && будет выполнена только в том случае, если статус выхода команды test равен true,
Если вы хотите выполнить серию команд после оператора &&, просто заключите команды в фигурные скобки, разделенные ; или &&:
Напротив оператор &&, после оператора || будет выполняться только в том случае, если статус выхода команды test равен false.
Проверьте, существует ли каталог
Оператор -d позволяют проверить, является ли файл каталогом или нет.
Например, чтобы проверить, /etc/docker существует ли каталог, вы должны использовать:
Вы также можете использовать двойные скобки [[ вместо одной [.
Проверьте, не существует ли файл
Как и во многих других языках, тестовое выражение можно отменить, используя логический оператор ! (восклицательный знак):
Проверьте, существует ли несколько файлов
Вместо использования сложных вложенных конструкций if/else вы можете использовать -a (или && с [[), чтобы проверить, существует ли несколько файлов:
Эквивалентные варианты без использования оператора IF:
Операторы проверки файлов
Команда test включает в себя следующие операторы FILE, которые позволяют тестировать определенные типы файлов:
- -b FILE – Истина, если ФАЙЛ существует и является специальным файлом блока.
- -c FILE – Истина, если ФАЙЛ существует и является файлом специальных символов.
- -d FILE – Истина, если ФАЙЛ существует и является каталогом.
- -e FILE – Истинно, если ФАЙЛ существует и является файлом, независимо от его типа (узел, каталог, сокет и т. Д.).
- -f FILE – Истина, если ФАЙЛ существует и является обычным файлом (не каталогом или устройством).
- -G FILE – Истина, если ФАЙЛ существует и имеет ту же группу, что и пользователь, выполняющий команду.
- -h FILE – Истина, если ФАЙЛ существует и является символической ссылкой.
- -g FILE – Истина, если ФАЙЛ существует и установлен флаг set-group-id (sgid).
- -k FILE – Истина, если ФАЙЛ существует и установлен флаг закрепления битов.
- -L FILE – Истина, если ФАЙЛ существует и является символической ссылкой.
- -O FILE – Истина, если ФАЙЛ существует и принадлежит пользователю, выполняющему команду.
- -p FILE – Истина, если ФАЙЛ существует и является каналом.
- -r FILE – Истина, если ФАЙЛ существует и доступен для чтения.
- -S FILE – Истина, если ФАЙЛ существует и является сокетом.
- -s FILE – Истина, если ФАЙЛ существует и имеет ненулевой размер.
- -u FILE – Истина, если установлен флаг set-user-id (suid).
- -w FILE – Истина, если ФАЙЛ существует и доступен для записи.
- -x FILE – Истина, если ФАЙЛ существует и является исполняемым.
Заключение
В этой статье мы показали, как проверить, существует ли файл или каталог с помощью Bash.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.