Android

Jak sprawdzić, czy plik lub katalog istnieje w bash

[PL] Tutorial porządnego pisania skryptów bash - #1 Wstęp, dobre praktyki i przydatne narzędzie

[PL] Tutorial porządnego pisania skryptów bash - #1 Wstęp, dobre praktyki i przydatne narzędzie

Spisu treści:

Anonim

Wiele razy podczas pisania skryptów Shell 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 testowego, aby sprawdzić, czy plik istnieje i określić typ pliku.

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

test EXPRESSION]

Sprawdź, czy plik istnieje

Podczas sprawdzania, czy plik istnieje, najczęściej używanymi operatorami PLIKÓW są -e i -f . Pierwszy sprawdzi, czy plik istnieje niezależnie od typu, a drugi zwróci prawdę tylko wtedy, gdy PLIK jest zwykłym plikiem (nie katalogiem ani urządzeniem).

Najbardziej czytelną opcją przy sprawdzaniu, czy plik istnieje, jest użycie polecenia testowego w połączeniu z instrukcją if. Każdy z poniższych fragmentów sprawdzi, czy plik /etc/resolv.conf istnieje:

FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if]; then echo "$FILE exist" fi

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

FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi Zawsze używaj podwójnych cudzysłowów, aby uniknąć problemów z plikami zawierającymi spacje w ich nazwach.

Możesz także użyć polecenia testowego bez instrukcji if. Polecenie po operatorze && zostanie wykonane tylko wtedy, gdy status wyjścia polecenia testowego jest prawdziwy, test -f /etc/resolv.conf && echo "$FILE exist"

&& echo "$FILE exist"

] && echo "$FILE exist"

&& { echo "$FILE exist"; cp "$FILE" /tmp/; }

W przeciwieństwie do && , oświadczenie po || operator zostanie wykonany tylko wtedy, gdy status wyjścia polecenia testowego to false .

&& echo "$FILE exist" || echo "$FILE does not exist"

Sprawdź, czy istnieje katalog

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

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

FILE=/etc/docker if; then echo "$FILE is a directory" fi

&& echo "$FILE is a directory"

Możesz także użyć podwójnych nawiasów , 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));

Sprawdź, czy plik nie istnieje

Podobnie jak w wielu innych językach, wyrażenie testowe można zanegować za pomocą ! (wykrzyknik) logiczny nie operator:

FILE=/etc/docker if; then echo "$FILE does not exist" fi

Tak samo jak powyżej:

&& echo "$FILE does not exist"

Sprawdź, czy istnieje wiele plików

Zamiast używać skomplikowanych zagnieżdżonych konstrukcji, jeśli / else można użyć opcji -a (lub && with ; then echo "$FILE is a directory" fi

FILE=/etc/docker if; then echo "$FILE is a directory" fi

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

&& echo "both files exist"

] && echo "both files exist"

Operatorzy testowania plików

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

  • -b FILE - Prawda, jeśli PLIK istnieje i jest blokowym plikiem specjalnym. -c FILE - Prawda, jeśli PLIK istnieje i jest plikiem ze znakami specjalnymi. -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ą flagę lepkiego bitu. -L FILE - Prawda, jeśli PLIK istnieje i jest dowiązaniem symbolicznym. -O FILE - Prawda, jeśli PLIK istnieje i jest własnością użytkownika uruchamiającego polecenie. -p FILE - Prawda, jeśli PLIK istnieje i jest potokiem. -r FILE - Prawda, jeśli PLIK istnieje i jest czytelny. -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 istnieje flaga set-user-id (suid). -w FILE - Prawda, jeśli PLIK istnieje i jest zapisywalny. -x FILE - Prawda, jeśli PLIK istnieje i jest wykonywalny.

Wniosek

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

terminal bash