Android

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

getopts function | Working with Flags / Options - Tech Arkit

getopts function | Working with Flags / Options - Tech Arkit

Оглавление:

Anonim

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

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

Команда test принимает одну из следующих синтаксических форм:

test EXPRESSION]

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

При проверке существования файла чаще всего используются операторы FILE -e и -f . Первый проверит, существует ли файл независимо от типа, а второй вернет истину, только если ФАЙЛ является обычным файлом (не каталогом или устройством).

Наиболее читаемым вариантом при проверке существования файла является использование команды test в сочетании с оператором if. Любой из приведенных ниже фрагментов будет проверять, существует ли файл /etc/resolv.conf :

FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if]; then echo "$FILE exist" fi

Если вы хотите выполнить другое действие в зависимости от того, существует файл или нет, просто используйте конструкцию if / then:

FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi Всегда используйте двойные кавычки, чтобы избежать проблем при работе с файлами, содержащими пробелы в своих именах.

Вы также можете использовать команду test без оператора if. Команда после оператора && будет выполняться только в том случае, если статус завершения тестовой команды равен true, test -f /etc/resolv.conf && echo "$FILE exist"

&& echo "$FILE exist"

] && echo "$FILE exist"

&& { echo "$FILE exist"; cp "$FILE" /tmp/; }

Напротив && , заявление после || Оператор будет выполняться только в том случае, если статус выхода тестовой команды равен false .

&& echo "$FILE exist" || echo "$FILE does not exist"

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

Операторы -d позволяют вам проверить, является ли файл каталогом или нет.

Например, чтобы проверить, существует ли каталог /etc/docker вы должны использовать:

FILE=/etc/docker if; then echo "$FILE is a directory" fi

&& echo "$FILE is a directory"

Вы также можете использовать двойные скобки , 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));

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

Как и во многих других языках, тестовое выражение можно отменить, используя ! (восклицательный знак) логический не оператор:

FILE=/etc/docker if; then echo "$FILE does not exist" fi

То же, что и выше:

&& echo "$FILE does not exist"

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

Вместо использования сложных вложенных конструкций if / else вы можете использовать -a (или && с ; then echo "$FILE is a directory" fi

FILE=/etc/docker if; then echo "$FILE is a directory" fi

Эквивалентные варианты без использования оператора IF:

&& echo "both files exist"

] && echo "both files exist"

Операторы проверки файлов

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

  • -b FILE - Истинно, если ФАЙЛ существует и является специальным файлом блока. -c FILE - Истина, если ФАЙЛ существует и является файлом специальных символов. -d FILE - Истинно, если ФАЙЛ существует и является каталогом. -e FILE - Истинно, если ФАЙЛ существует и является файлом, независимо от его типа (узел, каталог, сокет и т. д.). -f FILE - Истинно, если ФАЙЛ существует и является обычным файлом (не каталогом или устройством). -G FILE - True, если ФАЙЛ существует и имеет ту же группу, что и пользователь, выполняющий команду. -h FILE - True, если ФАЙЛ существует и является символической ссылкой. -g FILE - True, если FILE существует и для него установлен флаг set-group-id (sgid). -k FILE - Истина, если ФАЙЛ существует и для него установлен флаг закрепления битов. -L FILE - True, если ФАЙЛ существует и является символической ссылкой. -O FILE - True, если ФАЙЛ существует и принадлежит пользователю, выполняющему команду. -p FILE - True, если ФАЙЛ существует и является каналом. -r FILE - Истинно, если ФАЙЛ существует и доступен для чтения. -S FILE - True, если ФАЙЛ существует и является сокетом. -s FILE - True, если ФАЙЛ существует и имеет ненулевой размер. -u FILE - Истина, если установлен флаг set-user-id (suid). -w FILE - Истинно, если ФАЙЛ существует и доступен для записи. -x FILE - True, если ФАЙЛ существует и является исполняемым.

Вывод

В этом руководстве мы показали, как проверить, существует ли файл или каталог с помощью Bash.

терминал bash