<Предыдущая | Содержание: | Следующая>
Выражения файлов
Следующие выражения используются для оценки состояния файлов:
Таблица 27-1: Выражения тестового файла
Выражение истинно, если:
Выражение истинно, если:
file1 -эф file2 file1 и file2 имеют одинаковые номера inode (два
имена файлов относятся к одному и тому же файлу путем жесткой ссылки).
file1 -нт file2 file1 новее, чем file2.
file1 -от file2 file1 старше, чем file2.
-b файл файл существует и представляет собой специальный блочный файл (устройство).
-c файл файл существует и является файлом специального символа (устройства).
-d файл файл существует и является каталогом.
-e файл файл существует.
-f файл файл существует и является обычным файлом.
-g файл файл существует и имеет идентификатор группы set.
-G файл файл существует и принадлежит эффективному идентификатору группы.
-k файл файл существует и имеет набор «липких битов».
-L файл файл существует и является символической ссылкой.
-O файл файл существует и принадлежит эффективному идентификатору пользователя.
-p файл файл существует и является именованным каналом.
-r файл файл существует и доступен для чтения (имеет доступ для чтения для эффективного пользователя).
-s файл файл существует и имеет длину больше нуля.
-S файл файл существует и является сетевым сокетом.
-t fd fd - дескриптор файла, направляемый в / из терминала. Это можно использовать, чтобы определить, перенаправляется ли стандартный ввод / вывод / ошибка.
-u файл файл существует и установлен uid.
-w файл файл существует и доступен для записи (имеет разрешение на запись для действующего пользователя).
-x файл файл существует и является исполняемым (имеет разрешение на выполнение / поиск для действующего пользователя).
Здесь у нас есть сценарий, демонстрирующий некоторые файловые выражения:
#! / Bin / Баш
# 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 доступен для выполнения / поиска."
#! / Bin / Баш
# 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 доступен для выполнения / поиска."
фи еще
echo "$ FILE не существует" выход 1
fi
выход
фи еще
echo "$ FILE не существует" выход 1
fi
выход
Скрипт оценивает файл, присвоенный константе ФАЙЛОВ и отображает его результаты по мере выполнения оценки. В этом скрипте есть две интересные вещи. Во-первых, обратите внимание, как параметр $ FILE заключен в кавычки внутри выражений. Это не требуется для синтаксического завершения выражения, это скорее защита от пустого параметра. Если расширение параметра $ FILE если результат будет пустым, это вызовет ошибку (операторы будут интерпретироваться как ненулевые строки, а не как операторы). Использование кавычек вокруг параметра гарантирует, что за оператором всегда будет следовать строка, даже если строка пуста. Во-вторых, обратите внимание на присутствие выход команда в конце скрипта. В выход Команда принимает единственный необязательный аргумент, который становится статусом выхода сценария. Если аргумент не передан, статус выхода по умолчанию соответствует статусу выхода последней выполненной команды. С использованием выход таким образом позволяет сценарию указывать на сбой, если $ FILE расширяется до имени несуществующего файла. В выход Команда, появляющаяся в последней строке скрипта, является формальностью. Когда сценарий «работает до конца» (достигает конца файла), он завершается статусом завершения последней выполненной команды.
Точно так же функции оболочки могут возвращать статус выхода, включая целочисленный аргумент в возвращают команда. Если бы мы преобразовали приведенный выше сценарий в функцию оболочки, чтобы включить его в более крупную программу, мы могли бы заменить выход команды с возвращают заявления и получить желаемое поведение:
тестовый_файл () {
# test-file: Оценить статус файла FILE = ~ / .bashrc
если [-e "$ FILE"]; тогда
если [-f "$ FILE"]; тогда
echo "$ FILE - это обычный файл."
fi
если [-d "$ FILE"]; тогда
echo "$ FILE - это каталог."
fi
если [-r "$ 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 не существует" return 1
fi
}
echo "$ FILE доступен для чтения."
fi
если [-w "$ FILE"]; тогда
echo "$ FILE доступен для записи."
fi
если [-x "$ FILE"]; тогда
echo "$ FILE доступен для выполнения / поиска."
fi
еще
echo "$ FILE не существует" return 1
fi
}