Если вы работаете над сценарием 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 "Мой файл не существует"
Вы также можете использовать 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? Вы можете использовать в значительной степени тот же код, что и выше, используя оператор if:
#!/bin/bash FILE=/home/user/my_file if [ ! -f "$FILE" ] then echo "Мой файл не существует" fi
Теперь, когда вы знаете, как обращаться с файлами, давайте перейдем к каталогам.
Код для проверки каталога такой же, как и в предыдущем разделе. Разница лишь в том, что вы будете использовать -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
Вы можете снова использовать отрицание, чтобы проверить, не существует ли каталог:
#!/bin/bash DIR=/home/user/my_dir if [ ! -d "$DIR" ] then echo "Мой каталог не существует" fi
Вот и все. Это все, что вам нужно сделать для проверки, существует ли каталог файлов в оболочке bash или нет.
Мы надеемся, что вы найдете этот совет полезным. Если у вас есть какие-либо вопросы или предложения, пожалуйста, не стесняйтесь оставлять комментарии ниже.