logo

Bash sprawdza, czy plik istnieje

W większości przypadków może się zdarzyć sytuacja, w której konieczne będzie wykonanie akcji sprawdzającej, czy plik istnieje, czy nie.

W Bash możemy użyć „polecenie testowe”, aby sprawdzić, czy plik istnieje i określić typ pliku.

Poniżej znajdują się składnie polecenia test. Możemy użyć dowolnego z tych poleceń:

 test expression [ expression ] [[ expression ]] 

Musimy użyć polecenia „[” z pojedynczym nawiasem, aby nasz skrypt był przenośny dla wszystkich powłok POSIX. Ulepszona wersja polecenia testowego zawiera podwójne nawiasy „[[”, które są obsługiwane w większości nowoczesnych systemów używających powłoki Bash, Zsh i Ksh jako domyślnej.

Sprawdź, czy plik istnieje

Podczas sprawdzania, czy plik istnieje, najczęściej używanymi operatorami plików są -e i -f. Opcja „-e” służy do sprawdzania, czy plik istnieje niezależnie od typu, natomiast opcja „-f” służy do zwracania wartości true tylko wtedy, gdy plik jest zwykłym plikiem (nie katalogiem ani urządzeniem).

Najczęstszą opcją sprawdzenia, czy plik istnieje, jest użycie polecenia test z instrukcją warunkową if.

Poniżej znajdują się przykłady sprawdzania, czy plik „read_file.txt” istnieje:

Metoda 1

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

Metoda 2

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

Metoda 3

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

Wyjście

Dane wyjściowe dla wszystkich trzech metod będą wyglądać jak poniżej, ponieważ w katalogu znajduje się plik (read_file.txt):

drzewo wyszukiwania binarnego]
 read_file.txt exist 

Jeśli chcemy wykonać akcję, która da wynik w zależności od tego, czy plik istnieje, czy nie, możemy użyć konstrukcji if/then w następujący sposób:

Przykład

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

Wyjście

 read_file.txt exist 

Polecenie test możemy także zastosować bez instrukcji if. Możemy zastosować dowolną z poniższych metod:

Metoda 1

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

Metoda 2

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

Metoda 3

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

Wyjście

Dane wyjściowe dla wszystkich trzech metod będą wyglądać jak poniżej, ponieważ w katalogu znajduje się plik (read_file.txt):

 read_file.txt exist 

Jeżeli po operatorze && należy wykonać kilka poleceń, należy je ująć w nawiasy klamrowe oddzielone średnikiem(;) lub AND (&&), tj.:

tablice Java

Przykład

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

W przeciwieństwie do &&, instrukcja po || operator jest wykonywany tylko wtedy, gdy kod wyjścia polecenia testowego ma wartość „false”.

Przykład

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

Wyjście

 read_file.txt exist 

Są to powszechnie używane metody w Bash do sprawdzania, czy plik istnieje, czy nie.

Sprawdź, czy katalog istnieje

Operator „-d” pozwala nam sprawdzić, czy plik jest katalogiem, czy nie.

Poniżej przedstawiono metody sprawdzania, czy katalog „Javatpoint” istnieje:

Metoda 1

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

Metoda 2

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

Notatka:Możemy także użyć podwójnych nawiasów „[[” zamiast pojedynczego nawiasu „[”.

Wyjście

Dane wyjściowe obu powyższych metod będą wyglądać jak poniżej, ponieważ mamy katalog (o nazwie Javatpoint) obecny w określonej lokalizacji:

 Javatpoint is a directory 

Sprawdź, CZY plik nie istnieje

Wyrażenie testowe można zanegować za pomocą wykrzyknika (! -operator logiczny NOT). Sprawdź następujący przykład:

Przykład

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

Powyższy skrypt można również zapisać w następujący sposób:

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

Wyjście

 missing_read_file.txt unavailable 

Operatory testów plików

Polecenia testowe obejmują następujące operatory plików, które pozwalają nam testować określone typy plików:

-b Plik zwraca „Prawda”, jeśli PLIK istnieje jako specjalny plik blokowy.
-c Zwraca plik „Prawda”, jeśli PLIK istnieje jako plik ze znakami specjalnymi.
-d Plik zwraca „Prawda”, jeśli PLIK istnieje jako katalog.
-e Plik zwraca „Prawda”, jeśli PLIK istnieje jako plik, niezależnie od typu (węzeł, katalog, gniazdo itp.).
-f Plik zwraca „Prawda”, jeśli PLIK istnieje jako zwykły plik (nie katalog lub urządzenie).
-G Zwroty plików „Prawda”, jeśli PLIK istnieje i zawiera tę samą grupę, w której użytkownik uruchamia polecenie.
-h Zwraca plik „Prawda”, jeśli PLIK istnieje jako dowiązanie symboliczne.
-g Plik zwraca „Prawda”, jeśli PLIK istnieje i zawiera ustawioną flagę set-group-id (sgid).
-k Zwraca plik „Prawda”, jeśli PLIK istnieje i zawiera zestaw flag bitów trwałych.
-L Plik zwraca „Prawda”, jeśli PLIK istnieje jako dowiązanie symboliczne.
-O Plik zwraca „Prawda”, jeśli PLIK istnieje i jest własnością użytkownika uruchamiającego polecenie.
-p Zwraca plik „Prawda”, jeśli PLIK istnieje jako potok.
-r Zwraca plik „Prawda”, jeśli PLIK istnieje jako plik czytelny.
-S Zwraca plik „Prawda”, jeśli PLIK istnieje jako gniazdo.
-s Zwraca plik „Prawda”, jeśli PLIK istnieje i ma rozmiar niezerowy.
-u Zwraca plik „True”, jeśli PLIK istnieje i ustawiona jest flaga set-user-id (suid).
-w Zwraca plik „Prawda”, jeśli PLIK istnieje jako plik zapisywalny.
-x Zwraca plik „Prawda”, jeśli PLIK istnieje jako plik wykonywalny.