ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как проверить, существует ли файл или каталог в Bash Shell

Как проверить, существует ли файл или каталог в Bash Shell

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

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

 

Проверьте, существует ли файл в скрипте bash

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

Допустим, вы хотите проверить, существует ли файл /home/user/my_file или нет. Вот как вы можете проверить с помощью квадратных скобок

#!/bin/bash
 
if [ -f /home/user/my_file ]
then
    echo "Мой файл существует"
fi

 

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

#!/bin/bash

FILE=/home/user/my_file
 
if [ -f "$FILE" ]
then
    echo "Мой файл существует"
else 
    echo "Мой файл не существует"
fi

 

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

[ -f /home/user/my_file ] && echo "Мой файл существует" || echo "Мой файл не существует"

 

Проверьте файл существует в Bash с тестом

Вы также можете использовать test в bash, чтобы увидеть, существует файл или нет. Это почти то же самое, только то, что вы не используете квадратные скобки в операторе if:

#!/bin/bash

FILE=/home/user/my_file
 
if test -f "$FILE" 
then
    echo "Мой файл существует"
else 
    echo "Мой файл не существует"
fi

 

Вы также можете использовать приведенный выше код в одну строку следующим образом:

test -f /home/user/my_file && echo "Мой файл существует" || echo "Мой файл не существует"

 

Проверьте, не существует ли файл в скрипте bash

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

#!/bin/bash

FILE=/home/user/my_file
 
if [ ! -f "$FILE" ]
then
    echo "Мой файл не существует"
fi

 

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

Проверьте, существует ли каталог в скрипте bash

Код для проверки каталога такой же, как и в предыдущем разделе. Разница лишь в том, что вы будете использовать -d вместо -f. -d возвращает true только для каталогов.

#!/bin/bash
 
if [ -d /home/user/my_dir ]
then
    echo "Мой каталог существует"
fi

 

Вы также можете использовать тест здесь:

#!/bin/bash

DIR=/home/user/my_dir
 
if test -d "$DIR" 
then
    echo "Мой каталог существует"
else 
    echo "Мой каталог не существует"
fi

 

Проверьте, не существует ли каталог в bash

Вы можете снова использовать отрицание, чтобы проверить, не существует ли каталог:

#!/bin/bash

DIR=/home/user/my_dir
 
if [ ! -d "$DIR" ]
then
    echo "Мой каталог не существует"
fi

 

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

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

Exit mobile version