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



Сделать это можно несколькими способами:



filename="test.txt"



if [ -f $filename ];

then

echo "File exist"

fi



if test -f $filename;

then

echo "File exist"

fi



В первом примере ключ -f означает = True if file exists and is a regular file. Возвращаем True если файл существует и является обычным файлом (не директорий, ни симлинком и т.п.)



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



Команда test предназначена для проверки типа файла и сравнения чисел и строк. Возвращает код возврата 0 (истина) или 1 (ложь) в зависимости от вычисления выражения. Выражения могут быть как унарными, так и бинарными.



Ну а если подставить символ «!» в условия, то сработает обратная логика:



if [ ! -f $filename ];

if ! test -f $filename;



Здесь мы уже получим сообщение — указанный файл не найден. Для разных задач, разные условия.



Да, часто возникают вопросы по ключу «-f», это не единственный ключ, их достаточно много, например можно проверить существование директории, сокета, установленные права и т.п. Табличку со всеми этими ключами я вынес отдельно сюда.



То же самое можно уместить в одну строчку, синтаксис будет таким:



[ ! -f "$filename" ] && echo "file not found" || echo "file exist"



Подобные конструкции с одной стороны удобные, но ОЧЕНЬ плохо читаются, так что советую использовать их по минимуму. Например однострочник актуален в пайплайнах gitlab и т.п. где нужно умещать логику в одну строку.



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



Сегодня еще увидимся после интеграции, а вот завтра устроим разгрузочный день, пятница как-никак. Ладно давай пять, на связи!



tags: #bash #linux



🟢 Подпишись: @bashdays