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