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. |