Jak sprawdzić, czy plik lub katalog istnieje w Bash

Wiele razy podczas pisania skryptów powłoki możesz znaleźć się w sytuacji, w której musisz wykonać akcję w oparciu o to, czy plik istnieje, czy nie .

W Bash możesz użyć polecenia test, aby sprawdzić, czy plik istnieje i określić typ pliku.

Polecenie test przyjmuje jedną z następujących form składni:

Jeśli chcesz, aby Twój skrypt był przenośny, powinieneś użyć starego testu ; then echo "$FILE exists."fi

Jeśli chcesz wykonać inną akcję w zależności od tego, czy plik istnieje, czy nie, po prostu użyj konstrukcji if / then:

Zawsze używaj cudzysłowów, aby uniknąć problemów z plikami zawierające spacje w nazwach.

Możesz także użyć polecenia test bez instrukcji if. Polecenie za operatorem && zostanie wykonane tylko wtedy, gdy kod zakończenia polecenia testowego to prawda,

Jeśli chcesz uruchom serię poleceń po operatorze &&, po prostu umieść polecenia w nawiasach klamrowych, oddzielając je ; lub &&:

W przeciwieństwie do &&, instrukcja po Operator || zostanie wykonany tylko wtedy, gdy kod zakończenia polecenia testowego to false.

Sprawdź, czy katalog istnieje #

Operatory -d pozwalają sprawdzić, czy plik jest czy nie.

Na przykład, aby sprawdzić, czy katalog /etc/docker istnieje, należy użyć:

Możesz także użyć podwójnych nawiasów ; then echo "$FILE does not exist."fi

Tak jak powyżej:

Sprawdź, czy istnieje wiele plików #

Zamiast używać skomplikowanych zagnieżdżonych konstrukcji if / else, możesz użyć -a (lub && z ; then echo "Both files exist."fi

Równoważne warianty bez użycia instrukcji IF:

Operatory testu plików #

Polecenie test zawiera następujące operatory FILE, które umożliwiają testowanie określonych typów plików:

  • -b FILE – Prawda, jeśli PLIK istnieje i jest specjalnym plikiem blokowym.
  • -c FILE – Prawda jeśli PLIK istnieje i jest plikiem znaków specjalnych.
  • -d FILE – Prawda, jeśli PLIK istnieje i jest katalogiem.
  • -e FILE – Prawda, jeśli PLIK istnieje i jest plikiem, niezależnie od typu (węzeł, katalog, gniazdo itp.).
  • -f FILE – Prawda, jeśli PLIK istnieje i jest zwykłym plikiem (nie katalogiem ani urządzeniem).
  • -G FILE – Prawda, jeśli PLIK istnieje i ma tę samą grupę co użytkownik uruchamiający polecenie.
  • -h FILE – Prawda, jeśli PLIK istnieje i jest dowiązaniem symbolicznym.
  • -g FILE – Prawda, jeśli PLIK istnieje i ma ustawioną flagę set-group-id (sgid).
  • -k FILE – Prawda, jeśli PLIK istnieje i ma ustawioną lepką flagę bitową.
  • -L – Prawda, jeśli PLIK istnieje i jest dowiązaniem symbolicznym.
  • -O FILE – Prawda, jeśli PLIK istnieje i należy do użytkownika uruchamiającego polecenie.
  • -p FILE – Prawda, jeśli PLIK istnieje i jest potokiem.
  • -r FILE – Prawda, jeśli PLIK istnieje i można go odczytać.
  • -S FILE – Prawda, jeśli PLIK istnieje i jest gniazdem.
  • -s FILE – Prawda, jeśli PLIK istnieje i ma niezerowy rozmiar.
  • -u FILE – Prawda, jeśli PLIK istnieje i ustawiona jest flaga set-user-id (suid).
  • -w FILE – Prawda, jeśli PLIK istnieje i można go zapisać.
  • -x FILE – Prawda, jeśli PLIK istnieje i jest exe nadaje się do krojenia.

Wniosek #

W tym przewodniku pokazaliśmy, jak sprawdzić, czy plik lub katalog istnieje w Bash.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *