Линукс проверить наличие папки

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

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

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

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

test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]] 

Если вы хотите, чтобы ваш сценарий был переносимым, вам следует предпочесть старую команду test [ , которая доступна во всех оболочках POSIX. Новая обновленная версия тестовой команды [[ (двойные скобки) поддерживается в большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.

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

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

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

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

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

FILE=/etc/resolv.conf if [ -f "$FILE" ]; then echo "$FILE exists." else echo "$FILE does not exist." fi 

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

Вы также можете использовать команду test без оператора if. Команда после оператора && будет выполнена только в том случае, если статус выхода тестовой команды — истина,

test -f /etc/resolv.conf && echo "$FILE exists." 
[ -f /etc/resolv.conf ] && echo "$FILE exists." 
[[ -f /etc/resolv.conf ]] && echo "$FILE exists." 

Если вы хотите запустить серию команд после оператора && просто заключите команды в фигурные скобки, разделенные ; или && :

[ -f /etc/resolv.conf ] &&  echo "$FILE exist."; cp "$FILE" /tmp/; > 

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

[ -f /etc/resolv.conf ] && echo "$FILE exist." || echo "$FILE does not exist." 

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

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

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

FILE=/etc/docker if [ -d "$FILE" ]; then echo "$FILE is a directory." fi 
[ -d /etc/docker ] && echo "$FILE is a directory." 

Вы также можете использовать двойные скобки [[ вместо одинарной [ .

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

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

FILE=/etc/docker if [ ! -f "$FILE" ]; then echo "$FILE does not exist." fi 
[ ! -f /etc/docker ] && echo "$FILE does not exist." 

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

Вместо использования сложных вложенных конструкций if / else вы можете использовать -a (или && с [[ ), чтобы проверить, существует ли несколько файлов:

if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then echo "Both files exist." fi 
if [[ -f /etc/resolv.conf && -f /etc/hosts ]]; then echo "Both files exist." fi 

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

[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "Both files exist." 
[[ -f /etc/resolv.conf && -f /etc/hosts ]] && echo "Both files exist." 

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

Команда 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.

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

Источник

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

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

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

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

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

test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]]

Если вы хотите, чтобы ваш скрипт был переносимым, вы должны предпочесть использовать старую тестовую команду [, которая доступна во всех оболочках POSIX. Новая обновленная версия команды test [[(двойные скобки) поддерживается в большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.

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

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

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

FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE существует" fi
FILE=/etc/resolv.conf if [ -f "$FILE" ]; then echo "$FILE существует" fi
FILE=/etc/resolv.conf if [[ -f "$FILE" ]]; then echo "$FILE существует" fi

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

FILE=/etc/resolv.conf if [ -f "$FILE" ]; then echo "$FILE существует" else echo "$FILE не существует" fi

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

Вы также можете использовать команду test без оператора if. Команда после оператора && будет выполнена только в том случае, если статус выхода команды test равен true,

test -f /etc/resolv.conf && echo "$FILE существует"
[ -f /etc/resolv.conf ] && echo "$FILE существует"
[[ -f /etc/resolv.conf ] && echo "$FILE существует"

Если вы хотите выполнить серию команд после оператора &&, просто заключите команды в фигурные скобки, разделенные ; или &&:

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

[ -f /etc/resolv.conf ] && echo "$FILE существует" || echo "$FILE не существует"

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

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

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

FILE=/etc/docker if [ -d "$FILE" ]; then echo "$FILE являться каталогом" fi
[ -d /etc/docker ] && echo "$FILE являться каталогом"

Вы также можете использовать двойные скобки [[ вместо одной [.

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

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

FILE=/etc/docker if [ ! -f "$FILE" ]; then echo "$FILE существует, и это каталог" fi
[ ! -f /etc/docker ] || echo "$FILE не существует"

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

Вместо использования сложных вложенных конструкций if/else вы можете использовать -a (или && с [[), чтобы проверить, существует ли несколько файлов:

FILE=/etc/docker if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then echo "$FILE это каталог" fi
FILE=/etc/docker if [ -f /etc/resolv.conf && -f /etc/hosts ]; then echo "$FILE iэто каталог" fi

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

[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "оба файла существуют"
[[ -f /etc/resolv.conf && -f /etc/hosts ]] && echo "оба файла существуют"

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

Команда 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 — Истина, если ФАЙЛ существует и является исполняемым.

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

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

Вот так будет самый точный поиск пользователя:
grep «^test1:» /etc/passwd
grep «test1:» /etc/passwd
test1:x:999:1003:Hi the test1:/home/test1:/bin/bash
test-test1:x:997:1003:Hi the test-test1:/home/test1:/bin/false
test1www:x:996:1003:Hi the test1www:/home/test1:/bin/false
[email protected]:~# grep «^test1:» /etc/passwd
test1:x:999:1003:Hi the test1:/home/test1:/bin/bash

Эм, а на практике проверял код?
Только что создал тестовый файлик с кодом
grep «test2» /etc/passwd >/dev/null
if [ $? -ne 0 ]; then
echo ‘No username found’
fi
проверяем:
[email protected]:~$ bash usr.sh
No username found
[email protected]:~$ sh usr.sh
No username found

Проверка существования пользователя не точная:
если существует пользователь, например, test2
А grep ищем несуществующего пользователя test, то его найдет.

Добавить комментарий Отменить ответ

Теги

Категории

Похожие записи

Zabbix Host [Host]: another network error, wait for 15 seconds, графики с обрывами

Столкнулся со следующей проблемой zabbix agent-a, на сервере забикса графики рисовались прерывистыми линиями, например так: и в логе сервера постоянно…

HTML5 enabling script (Обновлено 2018.12.04)

Обновлено 2018.12.04 — > С Google Code удалили скрипт. Теперь, либо скачать с GitHub здесь https://github.com/aFarkas/html5shiv и положить его к…

С Новым годом!

Морозное утро и елочка в доме, Компания близких людей, Сказки о Деде Морозе, о гноме, Цветные шары у дверей. Пускай…

Источник

Читайте также:  Linux ubuntu web камера
Оцените статью
Adblock
detector