У меня есть файл (называется version
), который содержит текст:
version=31
Я хочу, чтобы bash
скрипт проверил, содержит ли файл: version=31
. Если да, то продолжить выполнение сценария; если нет, выйти и выдать сообщение: Image is not Image 31
.
Как мне этого добиться?
Предполагая, что это часть более крупного скрипта, который каким-то образом выполняет итерацию по нескольким файлам изображений с соответствующими файлами версий:
# image_fname: the filename of the image file
# image_version_fname: the filename of the image version info file
# image_version: an integer with the supposed version number
if ! grep -F -x -q "version=$image_version" "$image_version_fname"
then
printf 'Warning: Image "%s" is not image %d\n' "$image_fname" "$image_version" >&2
echo 'Warning: Version file contains:' >&2
cat "$image_version_fname" >&2
fi
Флаги grep
означают «соответствие как фиксированная строка, а не как регулярное выражение» ( -F
), «сопоставить всю строку» ( -x
) и «меня интересует только статус выхода, а не сами совпадения» ( -q
).
Что-то вроде этого?
fgrep -xq 'version=31' version || { echo "Image is not Image 31"; exit 1; }
Этот grep
- это файл версия
для строки версия = 31
, и если строка не найдена он отображает сообщение и закрывается. Если он найдет строку, сценарий продолжится.
Если вы ожидаете изменения версии, вы, вероятно, захотите заменить version = 31
переменной:
imgver="version=31"
fgrep -xq "$imgver" version || { echo "Image is not Image $imgver"; exit 1; }