У більшості випадків нам може знадобитися виконати дію, яка перевірить, чи існує файл.
У 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 Повернення файлів | «Істина», якщо ФАЙЛ існує як виконуваний файл. |