Меню Рубрики

Linux проверка существования директории

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

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

Проверка существования директории:

Проверка существования пользователя:

4 комментария . Оставить новый

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

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

$ sh usr.sh
No username found

grep -x #полное совпадение

Вот так будет самый точный поиск пользователя:
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

Источник

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

В операционных системах GNU/Linux любые объекты системы являются файлами. И проверка существования файла bash — наиболее мощный и широко применяемый инструмент для определения и сравнения в командном интерпретаторе.

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

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

Начать стоит с простого и более общего метода. Параметр -e позволяет определить, существует ли указанный объект. Не имеет значения, является объект каталогом или файлом.

#!/bin/bash
# проверка существования каталога
if [ -e $HOME ]
then
echo «Каталог $HOME существует. Проверим наличие файла»
# проверка существования файла
if [ -e $HOME/testing ]
then
# если файл существует, добавить в него данные
echo «Строка для существующего файла» >> $HOME/testing
echo «Файл существует. В него дописаны данные.»
else
# иначе — создать файл и сделать в нем новую запись
echo «Файл не существует, поэтому создается.»
echo «Создание нового файла» > $HOME/testing
fi
else
echo «Простите, но у вас нет Домашнего каталога»
fi

Пример работы кода:

Вначале команда test проверяет параметром -e, существует ли Домашний каталог пользователя, название которого хранится системой в переменной $HOME. При отрицательном результате скрипт завершит работу с выводом сообщения об этом. Если такой каталог обнаружен, параметр продолжает проверку. На этот раз ищет в $HOME файл testing. И если он есть, то в него дописывается информация, иначе он создастся, и в него запишется новая строка данных.

Проверка наличия файла

Проверка файла Bash на то, является ли данный объект файлом (то есть существует ли файл), выполняется с помощью параметра -f.

#!/bin/bash
if [ -f $HOME ]
then
echo «$HOME — это файл»
else
echo «$HOME — это не файл»
if [ -f $HOME/.bash_history ]
then
echo «А вот .bash_history — файл»
fi
fi

Пример работы кода:

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

На заметку: на практике предпочтительнее использовать сначала проверку на наличие объекта как такового, а затем — на его конкретный тип. Так можно избежать различных ошибок или неожиданных результатов работы программы.

Проверка файла на пустоту

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

#!/bin/bash
file=t15test
touch $file
if [ -s $file ]
then
echo «Файл $file содержит данные.»
else
echo «Файл $file пустой.»
fi
echo «Запись данных в $file. »
date > $file
if [ -s $file ]
then
echo «Файл $file содержит данные.»
else
echo «Файл $file все еще пустой.»
fi

Результат работы программы:

В этом скрипте файл создаётся командой touch, и при первой проверке на пустоту возвращается отрицательный результат. Затем в него записываются данные в виде команды date, после чего повторная проверка файла возвращает истину.

Выводы

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

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

Источник

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

Главное меню » Операционная система Linux » Как проверить, существует ли файл или каталог в Bash

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Как открыть несколько версий одной программы в mac os
  • Как открыть мониторинг системы mac os
  • Как открыть консоль mac os
  • Как открыть доступ к жесткому диску на mac os
  • Как открыть дисковую утилиту в mac os при загрузке