Podczas tworzenia skryptu bash możesz spotkać się z sytuacją, w której musisz sprawdzić, czy plik istnieje, czy nie wykonać z nim jakąś czynność. Możesz użyć polecenia test, aby sprawdzić, czy plik istnieje i jakiego jest typu.
W tym samouczku pokażemy, jak sprawdzić, czy plik istnieje w systemach operacyjnych opartych na Linuksie.
Podstawowa składnia polecenia testowego
Podstawowa składnia polecenia testowego służącego do sprawdzenia, czy plik istnieje, jak pokazano poniżej:
test -e file
Lub
test -f file
Gdzie:
- -e
Ta opcja sprawdzi, czy plik istnieje niezależnie od typu. - -f
Ta opcja sprawdzi, czy plik istnieje tylko wtedy, gdy PLIK jest zwykłym plikiem.
Powinieneś zobaczyć stronę podręcznika man polecenia test, jak pokazano poniżej:
man test
Powinieneś zobaczyć następujący ekran :
Sprawdź, czy plik istnieje, używając wiersza poleceń
W tej sekcji pokażemy Ci jak sprawdzić, czy plik istnieje, używając wiersza poleceń:
Uruchom następujące polecenie, aby sprawdzić, czy plik o nazwie / etc / fstab istnieje (T rue):
test -f /etc/fstab
Następnie uruchom następujące polecenie, aby ustawić kod zakończenia na 0 lub 1, gdy test zakończy się pomyślnie lub nie.
echo $?
Wynik:
0
Dane wyjściowe to 0, co oznacza, że plik / etc / fstab istnieje.
Możesz także użyj następującego polecenia, aby sprawdzić, czy plik istnieje:
echo $0
Wynik:
0
Następnie uruchom następujące polecenie, aby sprawdzić, czy plik / etc / fabab istnieje ( Fałsz).
test -f /etc/fabab
echo $?
Wyjście:
1
Wynik to 1, co oznacza, że plik / etc / fabab nie istnieje.
Ty może również sprawdzić, czy plik o nazwie /etc/rc.local istnieje lub nie używa warunkowego wykonania bash, jak pokazano poniżej:
test -f /etc/rc.local && echo "Exists" || echo "Not Exists"
Lub
&& echo "Exists" || echo "Not Exists"
Jeśli plik o nazwie /etc/rc.local istnieje, powinieneś zobaczyć następujące dane wyjściowe:
Exists
Możesz również sprawdzić, czy istnieje wiele plików, używając jednego polecenia:
&& echo "both files exist"
Lub
test -f /etc/passwd -a -f /etc/crontab && echo "both files exist"
Powinieneś zobaczyć następujące dane wyjściowe:
both files exist
Sprawdź, czy plik istnieje w Bash
W tej sekcji utworzymy skrypt bash i sprawdzimy, czy plik istnieje, czy nie, drukując wiadomość.
Stwórzmy plik o nazwie test.sh i sprawdźmy, czy plik /etc/rc.local istnieje lub nie istnieje:
nano test.sh
Dodaj następujące wiersze:
#!/bin/bash
FILE=/etc/rc.local
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Zapisz i zamknij plik, a następnie uruchom skrypt za pomocą następującego polecenia:
bash test.sh
Powinien pojawić się następujący wynik:
The file "/etc/rc.local" exists.
Teraz stwórzmy plik test.sh i sprawdźmy, czy plik / etc / rc.localad istnieje z nie:
nano test.sh
Dodaj następujące wiersze:
#!/bin/bash
FILE=/etc/rc.localad
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Zapisz i zamknij plik, a następnie uruchom skrypt za pomocą następującego polecenia:
bash test.sh
Powinieneś zobaczyć następujące dane wyjściowe:
The file "/etc/rc.localad" is not exists.
Możesz także sprawdzić, czy plik istnieje, czy nie, i wykonać na nim jakąś czynność w skrypcie bash.
Na przykład znajdź plik o nazwie / etc / hosts i skopiuj go do katalogu / opt, jeśli plik istnieje.
Aby to zrobić, utwórz plik o nazwie test.sh:
nano test.sh
Dodaj następujące wiersze:
FILE=/etc/hosts
if ; then
cp $FILE /opt
fi
Zapisz i zamknij plik, a następnie uruchom skrypt za pomocą następującego polecenia:
Teraz przetestuj katalog / opt za pomocą następującego polecenia:
ls /opt/hosts
Plik hosts powinien pojawić się w następującym wyniku:
/opt/hosts
Możesz także użyć wyrażenia! aby sprawdzić, czy plik nie istnieje.
Na przykład uruchom następujące polecenie, aby sprawdzić, czy plik / etc / hosting nie istnieje:
&& echo "File does not exist"
Lub
test ! -f /etc/hosting && echo "File does not exist"
Powinieneś zobaczyć następujące dane wyjściowe:
File does not exist
Sprawdź, czy katalog istnieje
Możesz również sprawdzić, czy katalog istnieje, czy nie, używając opcji -d.
Na przykład sprawdź, czy katalog / etc / apache2 istnieje, czy nie.
&& echo "Directory is exists"
Lub
test -d /etc/apache2 && echo "Directory is exists"
Powinien pojawić się następujący wynik:
Directory is exists
Możesz także utworzyć skrypt bash z wyrażeniami warunkowymi, aby sprawdzić, czy katalog istnieje, czy nie.
Utwórz plik o nazwie test.sh, jak pokazano poniżej:
nano test.sh
Dodaj następujące wiersze:
Zapisz i zamknij plik, gdy skończysz. Następnie nadaj odpowiednie uprawnienia za pomocą następującego polecenia:
chmod 755 test.sh
Następnie sprawdź, czy katalog / etc / nginx jest dostępny, czy nie następującym poleceniem:
./test.sh /etc/nginx
Powinieneś zobaczyć następujące dane wyjściowe:
Directory /etc/nginx/ exists.
Następnie sprawdź, czy katalog / etc / linux jest dostępny, czy nie, za pomocą następującego polecenia:
./test.sh /etc/linux
Powinien pojawić się następujący wynik:
Directory /etc/linux does not exists
Operatory testowania plików w Bash
Następujące operatory testowania plików pomogą Ci sprawdzić, czy „plik” istnieje i ma określone typy:
- -b
PLIK istnieje i jest specjalnym blokiem - -c
PLIK istnieje i ma specjalny znak - -d
PLIK istnieje i jest katalog - -e
PLIK istnieje - -f
PLIK istnieje i jest zwykłym plikiem - -g
PLIK istnieje i jest set-group-ID - -G
PLIK np ists i należy do efektywnego identyfikatora grupy - -h
PLIK istnieje i jest dowiązaniem symbolicznym (tak samo jak -L) - -k
PLIK istnieje i ma jego zestaw bitów lepkich - -L
PLIK istnieje i jest dowiązaniem symbolicznym (tak samo jak -h) - -O
PLIK istnieje i jest własnością efektywnego użytkownika ID - -p
PLIK istnieje i jest potokiem nazwanym - -r
PLIK istnieje i udzielono prawa do odczytu - -s
PLIK istnieje i ma rozmiar większy niż zero - -S
PLIK istnieje i jest gniazdem - -u
PLIK istnieje i jego bit set-user-ID jest ustawiona - -w
PLIK istnieje i udzielono mu prawa do zapisu - -x
PLIK istnieje i przyznano uprawnienie do wykonywania (lub wyszukiwania)