logo

Перевірка Bash, чи існує файл

У більшості випадків нам може знадобитися виконати дію, яка перевірить, чи існує файл.

У Bash ми можемо використовувати «test command», щоб перевірити, чи існує файл, і визначити тип файлу.

Нижче наведено синтаксис команди test, і ми можемо використовувати будь-яку з цих команд:

 test expression [ expression ] [[ expression ]] 

Щоб зробити наш сценарій переносимим для всіх оболонок POSIX, ми зобов’язані використовувати команду в одній дужці '['. Оновлена ​​версія тестової команди містить подвійні дужки '[[', які підтримуються в більшості сучасних систем, які використовують Bash, Zsh і Ksh як оболонку за замовчуванням.

Перевірте, чи існує файл

Під час перевірки існування файлу найпоширенішими файловими операторами є -e та -f. Параметр «-e» використовується для перевірки існування файлу незалежно від типу, тоді як параметр «-f» використовується для повернення справжнього значення, лише якщо файл є звичайним файлом (а не каталогом чи пристроєм).

Найпоширенішим способом перевірити, чи існує файл, є використання команди test з умовним оператором if.

Нижче наведено приклади перевірки існування файлу read_file.txt.

Спосіб 1

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

Спосіб 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

Спосіб 3

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

Вихід

Вихід для всіх трьох методів буде таким, як показано нижче, оскільки у нас є файл (read_file.txt), присутній у каталозі:

jdbc jdbc
 read_file.txt exist 

Якщо ми хочемо виконати дію, яка дасть результат залежно від того, існує файл чи ні, ми можемо використати конструкцію if/then таким чином:

приклад

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

Вихід

 read_file.txt exist 

Ми також можемо використовувати команду test без оператора if. Ми можемо використовувати будь-який із наведених нижче методів.

Спосіб 1

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

Спосіб 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

Спосіб 3

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

Вихід

Вихід для всіх трьох методів буде таким, як показано нижче, оскільки у нас є файл (read_file.txt), присутній у каталозі:

 read_file.txt exist 

Якщо після оператора && потрібно виконати кілька команд, візьміть їх у фігурні дужки, розділені крапкою з комою (;) або І (&&), тобто:

приклад

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

На відміну від &&, оператор після || Оператор виконується лише в тому випадку, якщо статус виходу тестової команди — «false».

приклад

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

Вихід

 read_file.txt exist 

Це методи, які зазвичай використовуються в Bash для перевірки існування файлу чи ні.

Перевірте, чи існує каталог

Оператор '-d' дозволяє нам перевірити, чи є файл каталогом чи ні.

hashmap java

Нижче наведено методи перевірки існування каталогу «Javatpoint».

Спосіб 1

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

Спосіб 2

 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

Примітка:Ми також можемо використовувати подвійні дужки '[[' замість одинарної дужки '['.

Вихід

Вихідні дані для обох наведених вище методів будуть такими, як показано нижче, оскільки у нас є каталог (під назвою Javatpoint), присутній у вказаному місці:

 Javatpoint is a directory 

Перевірте, ЯКЩО файл не існує

Тестовий вираз можна заперечити за допомогою знака оклику (! -логічний оператор NOT). Перегляньте наступний приклад:

приклад

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

Наведений вище сценарій також можна записати так:

 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

Вихід

 missing_read_file.txt unavailable 

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

Тестові команди включають наступні файлові оператори, які дозволяють тестувати певні типи файлів:

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