Тесты if / else для оператора case в bash - PullRequest
0 голосов
/ 10 сентября 2018

Я пишу скрипт на bash, чтобы легко зациклить какое-то программное обеспечение, и в зависимости от входных данных выбрать другую стратегию, которая будет использоваться для конкретного запуска. Например, следует ли запускать все файлы в каталоге или только в подмножестве, и являются ли файлы парными или независимыми. (Я работаю с файлами fastq, если вы скажете)

Обычно я предпочитаю писать оператор управления регистром всякий раз, когда у меня есть 3 или более опций, потому что я считаю, что их легче интерпретировать и поддерживать. Однако я хочу иметь возможность проверить, существуют ли определенные файлы аналогично тому, когда операторы if / else в bash делают if [ -e $foo ]; then etc Меня удивило, имеют ли операторы case-контроля какие-либо эквивалентные опции теста для операторов if / else example

Более конкретно, я хочу знать, возможно ли проверить наличие файла с помощью оператора case

1 Ответ

0 голосов
/ 10 сентября 2018

if не имеет параметров теста; команда test (также пишется [) делает. if и case делают две разные вещи. case сравнивает одно значение с количеством шаблонов, чтобы увидеть, какие из них соответствуют. if и elif проверяет состояние выхода команды . Просто так получается, что test / [ - это самая командная команда, используемая с оператором if.

Каждый тест, такой как -e, -d и т. Д., Соответствует вызову системного вызова с именем stat, который возвращает гораздо больше информации, чем любой отдельный тест; эта информация просто отбрасывается. Вы можете вручную запустить оболочку внешней программы вокруг stat (также называемой stat), а затем сопоставить шаблон на своем выходе с помощью оператора case. Это немного менее эффективно, поскольку включает в себя запуск внешней программы только для доступа к системному вызову. Тем не менее, дистрибутив bash поставляется со встроенным stat, который вы можете скомпилировать и позволить себе решить эту проблему.

(В журнале изменений для bash 5 упоминается новая загружаемая встроенная функция для stat & mdash; среди других команд & mdash ;, но она, похоже, ничем не отличается от той, которую я хотя и был доступен некоторое время.)

...