Использовать сортировку версии GNU -вместе с опцией «проверить, отсортирован ли ввод»:
printf '%s\n%s\n' "$version" "$New_version" | sort -rVc 2>/dev/null && echo ok
2>/dev/null
— отбрасывать жалобу сортировки, когда ввод не отсортирован; вы просто хотите знать, отсортировано оно или нет, что отражено в коде возврата.
Пробный запуск:
$ version=1.8.0_65
$ New_version=1.8.0_111
$ printf '%s\n%s\n' "$version" "$New_version" | sort -rVc 2>/dev/null && echo ok
$ version=1.8.0_650
$ printf '%s\n%s\n' "$version" "$New_version" | sort -rVc 2>/dev/null && echo ok
ok
$
В качестве альтернативы, сделайте это трудным путем:
oldstr=${old//./ }
oldstr=${oldstr//_/ }
newstr=${new//./ }
newstr=${newstr//_/ }
read -a oldarr <<< "$oldstr"
read -a newarr <<< "$newstr"
[ ${oldarr[0]} -ge ${newarr[0]} ] &&
[ ${oldarr[1]} -ge ${newarr[1]} ] &&
[ ${oldarr[2]} -ge ${newarr[2]} ] &&
[ ${oldarr[3]} -gt ${newarr[3]} ] && echo OK
Это устанавливает новые переменные, в которых мы заменяем все точки и символы подчеркивания пробелами, затем передаем те, что здесь, -строки в read
, чтобы разбить их на массивы, затем мы сравниваем каждый элемент параллельных массивов.
Я не уверен, есть ли у этого шаблона проектирования хотя бы одно хорошо -известное, официальное название или нет, но перетащите -в файлы конфигурации и перетащите -в конфигурацию directory — это термины, которые я видел для его описания. Если в синтаксисе конфигурационного файла есть директива include , которая может принимать подстановочные знаки, ее можно реализовать даже без модификации рассматриваемой программы.
В двух словах, он обеспечивает автоматизированное администрирование, позволяя пакетам программного обеспечения и/или инструментам автоматизации вставлять отдельные фрагменты конфигурации по мере необходимости вместо того, чтобы пытаться программно изменить один единственный файл конфигурации. Это также может принести пользу системным администраторам, позволяя группировать настройки по назначению.
Обратите внимание, что /etc/init.d
не полностью соответствует этому шаблону, а хорошо -известному, несколько более сложному шаблону, известному как сценарии запуска/выключения SysVinit:сценарии в /etc/init.d
не просто все включены в процесс запуска -, но существуют отдельные каталоги символических ссылок (/etc/rc.d/rc[0-6].d/
), которые используются для определения того, какие сценарии будут вызываться и в каком порядке. Некоторые более современные реализации генерируют и управляют символическими ссылками в этих каталогах автоматически на основе специально отформатированных -комментариев в начале скриптов в /etc/init.d/
... но это более позднее расширение, а не исходная часть запуска SysVinit. шаблон сценария завершения работы.