<Попередній | зміст | Наступна>
Файлові вирази
Для оцінки стану файлів використовуються такі вирази:
Таблиця 27-1: тестові вирази файлу
Вираз істинний, якщо:
Вираз істинний, якщо:
file1 -еф file2 file1 і file2 мають однакові номери inode (два
імена файлів посилаються на той самий файл шляхом жорсткого посилання).
![]()
file1 -нт file2 файл1 новіший за файл2.
![]()
file1 -от file2 file1 старший за файл2.
![]()
-b файл файл існує і є файлом спеціального блоку (пристрою).
![]()
-c файл файл існує і є файлом із спеціальними символами (пристроєм).
![]()
-d файл файл існує і є каталогом.
![]()
-e файл файл існує
![]()
-f файл файл існує і є звичайним файлом.
![]()
-g файл файл існує і є set-group-ID.
![]()
-G файл файл існує і належить ефективному ідентифікатору групи.
![]()
-k файл файл існує і має свій набір «липкої частини».
![]()
![]()
-L файл файл існує і є символічним посиланням.
![]()
-O файл файл існує і належить ефективному ідентифікатору користувача.
![]()
-p файл файл існує і є іменованим каналом.
![]()
-r файл файл існує і доступний для читання (має дозвіл на читання для ефективного користувача).
![]()
-s файл файл існує і має довжину, більшу за нуль.
![]()
-S файл файл існує і є мережевим сокетом.
![]()
-t fd fd є файловим дескриптором, спрямованим до/з терміналу. Це можна використовувати, щоб визначити, чи перенаправляються стандартні введення/виведення/помилка.
![]()
-u файл файл існує і встановлений.
![]()
-w файл файл існує і доступний для запису (має дозвіл на запис для ефективного користувача).
![]()
-x файл файл існує і є виконуваним (має дозвіл на виконання/пошук для ефективного користувача).
![]()
Тут ми маємо скрипт, який демонструє деякі вирази файлу:
#! / бін / баш
# test-file: Оцініть статус файлу FILE=~/.bashrc
якщо [ -e "$FILE" ]; тоді
якщо [ -f "$FILE" ]; тоді
echo "$FILE - звичайний файл."
fi
якщо [ -d "$FILE" ]; тоді
echo "$FILE - це каталог."
fi
якщо [ -r "$FILE" ]; тоді
echo "$FILE читається."
fi
якщо [ -w "$FILE" ]; тоді
echo "$FILE доступний для запису."
fi
якщо [ -x "$FILE" ]; тоді
echo "$FILE є виконуваним/доступним для пошуку."
#! / бін / баш
# test-file: Оцініть статус файлу FILE=~/.bashrc
якщо [ -e "$FILE" ]; тоді
якщо [ -f "$FILE" ]; тоді
echo "$FILE - звичайний файл."
fi
якщо [ -d "$FILE" ]; тоді
echo "$FILE - це каталог."
fi
якщо [ -r "$FILE" ]; тоді
echo "$FILE читається."
fi
якщо [ -w "$FILE" ]; тоді
echo "$FILE доступний для запису."
fi
якщо [ -x "$FILE" ]; тоді
echo "$FILE є виконуваним/доступним для пошуку."
fi ще
echo "$FILE не існує" вихід 1
fi
вихід
fi ще
echo "$FILE не існує" вихід 1
fi
вихід
Сценарій оцінює файл, призначений константі Фото і відображає свої результати під час виконання оцінки. Про цей сценарій варто звернути увагу на дві цікаві речі. Спочатку зверніть увагу, як параметр $FILE цитується у виразах. Це не потрібно для синтаксичного завершення виразу, це скоріше захист від того, що параметр порожній. Якщо параметр розширення $FILE якщо б призвело до порожнього значення, це спричинило б помилку (оператори будуть інтерпретуватися як рядки, які не мають значення нуль, а не як оператори). Використання лапок навколо параметра гарантує, що після оператора завжди слідує рядок, навіть якщо рядок порожній. По-друге, зверніть увагу на наявність вихід команда в кінці сценарію. The вихід команда приймає один необов'язковий аргумент, який стає статусом завершення сценарію. Якщо аргумент не передається, статус виходу за замовчуванням відповідає статусу виходу останньої виконаної команди. Використання вихід таким чином дозволяє сценарію вказувати на помилку if $FILE розгортається до імені неіснуючого файлу. The вихід Команда, що з’являється в останньому рядку сценарію, є формальністю. Коли сценарій «завершує кінець» (досягає кінця файлу), він закінчується зі статусом завершення останньої виконаної команди.
Аналогічно, функції оболонки можуть повертати статус виходу, включаючи цілочисельний аргумент до повертати команда. Якби ми перетворили наведений вище сценарій у функцію оболонки, щоб включити його в більшу програму, ми могли б замінити вихід команди з повертати висловлювання та отримати бажану поведінку:
test_file () {
# test-file: Оцініть статус файлу FILE=~/.bashrc
якщо [ -e "$FILE" ]; тоді
якщо [ -f "$FILE" ]; тоді
echo "$FILE - звичайний файл."
fi
якщо [ -d "$FILE" ]; тоді
echo "$FILE - це каталог."
fi
якщо [ -r "$FILE" ]; тоді
test_file () {
# test-file: Оцініть статус файлу FILE=~/.bashrc
якщо [ -e "$FILE" ]; тоді
якщо [ -f "$FILE" ]; тоді
echo "$FILE - звичайний файл."
fi
якщо [ -d "$FILE" ]; тоді
echo "$FILE - це каталог."
fi
якщо [ -r "$FILE" ]; тоді
echo "$FILE читається."
fi
якщо [ -w "$FILE" ]; тоді
echo "$FILE доступний для запису."
fi
якщо [ -x "$FILE" ]; тоді
echo "$FILE є виконуваним/доступним для пошуку."
fi
ще
echo "$FILE не існує" повертає 1
fi
}
echo "$FILE читається."
fi
якщо [ -w "$FILE" ]; тоді
echo "$FILE доступний для запису."
fi
якщо [ -x "$FILE" ]; тоді
echo "$FILE є виконуваним/доступним для пошуку."
fi
ще
echo "$FILE не існує" повертає 1
fi
}
документація