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), присъстващ в директорията:

xor в c++
 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“.

Пример

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

Изход

 read_file.txt exist 

Това са често използваните методи в Bash за проверка дали файлът съществува или не.

Проверете дали директорията съществува

Операторът '-d' ни позволява да проверим дали даден файл е директория или не.

Следват методите за проверка дали директорията „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 Връщане на файлове „Вярно“, ако ФАЙЛЪТ съществува като изпълним файл.