W większości przypadków możemy znaleźć sytuację, w której może być konieczne wykonanie akcji, która sprawdzi, czy plik istnieje, czy nie.
W Bash możemy użyć „polecenia test”, aby sprawdzić, czy plik istnieje i określić jego typ.
Poniżej znajduje się składnia polecenia test, a my można użyć dowolnego z następujących poleceń:
Jesteśmy zobowiązani do użycia pojedynczego polecenia „[” w nawiasie, aby nasz skrypt był przenośny dla wszystkich powłok POSIX. Zaktualizowana wersja polecenia test zawiera podwójne nawiasy „[[„, które są obsługiwane w większości nowoczesnych systemów używających Bash, Zsh i Ksh jako domyślnej powłoki.
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).
Najpowszechniejszą opcją sprawdzania, czy plik istnieje, czy nie, jest użycie polecenia test z instrukcją warunkową „if”.
Poniżej znajdują się przykłady sprawdzania, czy plik „read_file”. txt ”istnieje:
Metoda 1
Metoda 2
Metoda 3
Dane wyjściowe
Dane wyjściowe dla wszystkich trzech metod będą takie jak poniżej, ponieważ w katalogu znajduje się plik (read_file.txt):
read_file.txt exist
Jeśli chcemy wykonać akcję, która da wynik na podstawie tego, czy plik istnieje, czy nie, możemy użyć konstrukcji if / then w następujący sposób:
Przykład
Wyjście
read_file.txt exist
Możemy również użyć polecenia test bez instrukcji if. Możemy użyć dowolnej z następujących metod:
Metoda 1
Metoda 2
Metoda 3
Dane wyjściowe
Dane wyjściowe dla wszystkich trzech metod będą takie, jak poniżej, ponieważ mamy plik (read_file.txt) obecny w katalogu:
read_file.txt exist
Przykład
W przeciwieństwie do & &, instrukcja po || operator jest wykonywany tylko wtedy, gdy kod zakończenia polecenia testowego to „false”.
Przykład
Dane wyjściowe
read_file.txt exist
Są to powszechnie używane metody w Bash do sprawdzania, czy plik istnieje.
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
Metoda 2
Uwaga: możemy także użyć podwójnych nawiasów „[[” zamiast pojedynczego nawiasu „[” ” .
Dane wyjściowe
Dane wyjściowe dla obu powyższych metod będą takie 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). Zobacz poniższy przykład:
Przykład
Powyższy skrypt można również zapisać w następujący sposób:
Dane wyjściowe
missing_read_file.txt unavailable
Operatory testu plików
Polecenia testowe obejmują następujące operatory plików, które pozwalają nam test dla określonych typów plików:
| -b FileReturns | „Prawda” jeśli PLIK istnieje jako blok specjalny plik. |
| -c FileReturns | „Prawda”, jeśli PLIK istnieje jako plik znaków specjalnych. |
| -d FileReturns | „True”, jeśli PLIK istnieje jako katalog. |
| -e FileReturns | „True „jeśli PLIK istnieje jako plik, niezależnie od typu (węzeł, katalog, gniazdo itp.). |
| -f FileReturns | „ True ” jeśli PLIK istnieje jako zwykły plik (nie jest katalogiem ani urządzeniem). |
| -G FileReturns | „Prawda”, jeśli PLIK istnieje i zawiera ta sama grupa co użytkownik uruchamia comm i. |
| -h FileReturns | „True”, jeśli PLIK istnieje jako dowiązanie symboliczne. |
| -g FileReturns | „True”, jeśli PLIK istnieje i zawiera ustawioną flagę set-group-id (sgid). |
| -k FileReturns | „Prawda”, jeśli PLIK istnieje i zawiera ustawioną trwałą flagę bitową. |
| -L FileReturns | „Prawda”, jeśli PLIK istnieje jako dowiązanie symboliczne. |
| -O FileReturns | „Prawda”, jeśli PLIK istnieje i jest własnością użytkownika, który uruchamia polecenie. |
| -p FileReturns | „Prawda”, jeśli PLIK istnieje jako potok. |
| – r FileReturns | „True”, jeśli PLIK istnieje jako plik do odczytu. |
| -S FileReturns | „True”, jeśli FILE istnieje jako gniazdo. |
| -s FileReturns | „True”, jeśli PLIK istnieje i ma niezerowy rozmiar. |
| -u FileReturns | „Prawda”, jeśli PLIK istnieje, a flaga set-user-id (suid) jest ustawiona. |
| -w FileReturns | „True”, jeśli PLIK istnieje jako plik z możliwością zapisu. |
| -x FileReturns | „True”, jeśli PLIK istnieje jako plik wykonywalny. |