Mamy kilka operatorów, których można użyć do testowania różnych właściwości powiązanych z plikiem uniksowym.
Załóżmy zmienną file przechowuje istniejącą nazwę pliku „test”, którego rozmiar wynosi 100 bajtów i ma read, write i execute pozwolenie na -
| Operator |
Opis |
Przykład |
| -b file |
Sprawdza, czy plik jest blokowym plikiem specjalnym; jeśli tak, to warunek staje się prawdziwy. |
[-b $ plik] jest fałszywe. |
| -c file |
Sprawdza, czy plik jest znakowym plikiem specjalnym; jeśli tak, to warunek staje się prawdziwy. |
[-c $ plik] ma wartość fałsz. |
| -d file |
Sprawdza, czy plik jest katalogiem; jeśli tak, to warunek staje się prawdziwy. |
[-d $ plik] nie jest prawdą. |
| -f file |
Sprawdza, czy plik jest zwykłym plikiem w przeciwieństwie do katalogu lub pliku specjalnego; jeśli tak, to warunek staje się prawdziwy. |
[-f $ plik] jest prawdą. |
| -g file |
Sprawdza, czy plik ma ustawiony bit identyfikatora grupy zestawu (SGID); jeśli tak, to warunek staje się prawdziwy. |
[-g $ plik] jest fałszywe. |
| -k file |
Sprawdza, czy plik ma ustawiony bit lepki; jeśli tak, to warunek staje się prawdziwy. |
[-k $ plik] jest fałszywe. |
| -p file |
Sprawdza, czy plik jest nazwanym potokiem; jeśli tak, to warunek staje się prawdziwy. |
[-p $ plik] jest fałszywe. |
| -t file |
Sprawdza, czy deskryptor pliku jest otwarty i powiązany z terminalem; jeśli tak, to warunek staje się prawdziwy. |
[-t $ plik] jest fałszywe. |
| -u file |
Sprawdza, czy plik ma ustawiony bit Set User ID (SUID); jeśli tak, to warunek staje się prawdziwy. |
[-u $ plik] jest fałszywe. |
| -r file |
Sprawdza, czy plik jest czytelny; jeśli tak, to warunek staje się prawdziwy. |
[-r $ plik] jest prawdą. |
| -w file |
Sprawdza, czy plik jest zapisywalny; jeśli tak, to warunek staje się prawdziwy. |
[-w $ plik] jest prawdą. |
| -x file |
Sprawdza, czy plik jest wykonywalny; jeśli tak, to warunek staje się prawdziwy. |
[-x $ plik] jest prawdą. |
| -s file |
Sprawdza, czy plik ma rozmiar większy niż 0; jeśli tak, to warunek staje się prawdziwy. |
[-s $ plik] jest prawdą. |
| -e file |
Sprawdza, czy plik istnieje; jest prawdą, nawet jeśli plik jest katalogiem, ale istnieje. |
[-e $ plik] jest prawdą. |
Przykład
Poniższy przykład używa wszystkich file test operatorzy -
Załóżmy, że plik zmiennych zawiera istniejącą nazwę pliku "/var/www/tutorialspoint/unix/test.sh" którego rozmiar wynosi 100 bajtów i ma read, write i execute pozwolenie -
#!/bin/sh
file="/var/www/tutorialspoint/unix/test.sh"
if [ -r $file ] then echo "File has read access" else echo "File does not have read access" fi if [ -w $file ]
then
echo "File has write permission"
else
echo "File does not have write permission"
fi
if [ -x $file ] then echo "File has execute permission" else echo "File does not have execute permission" fi if [ -f $file ]
then
echo "File is an ordinary file"
else
echo "This is sepcial file"
fi
if [ -d $file ] then echo "File is a directory" else echo "This is not a directory" fi if [ -s $file ]
then
echo "File size is not zero"
else
echo "File size is zero"
fi
if [ -e $file ]
then
echo "File exists"
else
echo "File does not exist"
fi
Powyższy skrypt da następujący wynik -
File does not have write permission
File does not have execute permission
This is sepcial file
This is not a directory
File size is not zero
File does not exist
Podczas korzystania z operatorów testów plików należy wziąć pod uwagę następujące kwestie -
Między operatorami a wyrażeniami muszą znajdować się spacje. Na przykład 2 + 2 nie jest poprawne; należy zapisać jako 2 + 2.
if...then...else...fi oświadczenie to stwierdzenie decyzyjne, które zostało wyjaśnione w następnym rozdziale.
unix-basic-operators.htm