Необходимо использовать базовый класс, если действительно нет никакой причины для других разработчиков требовать использовать их собственный базовый класс в дополнение к участникам типа , и Вы предвидите проблемы управления версиями (см. http://haacked.com/archive/2008/02/21/versioning-issues-with-abstract-base-classes-and-interfaces.aspx ).
, Если у наследовавшихся разработчиков есть какая-либо причина использовать их собственный базовый класс для реализации интерфейса типа и Вы не видите, что интерфейсное изменяется, затем пойдите с интерфейсом. В этом случае можно все еще добавить базовый класс по умолчанию, который реализует интерфейс ради удобства.
Вот более простая версия Вашего сценария, (сохранение в целости юмора:)):
#!/bin/bash
## The && means that the script will run the next command only if this one
## succeeds, in other words, only if the string `version 1.0` is found.
bleachbit --version | grep -q 'version 1.0' &&
echo "$(tput setaf 2)The elves have verified the BleachBit version.$(tput sgr0)" &&
exit 0
## This block will only be executed if the grep above failed
wget -P ~/Downloads http://katana.oooninja.com/bleachbit/sf/bleachbit_1.0_all_ubuntu1204.deb &&
sudo dpkg -i ~/Downloads/bleachbit_1.0_all_ubuntu1204.deb &&
echo "$(tput setaf 2)The elves have installed BleachBit 1.0.$(tput sgr0)"
Примечание, которое я добавил &&
до конца каждой команды, того пути, Вы избежите ошибок, если какой-либо сбой команд начиная со сценария выйдет на первой неудавшейся команде.
А более безопасный подход должен был бы изменить первую команду на:
bleachbit --version | awk '/version/{if($NF>=1){exit 0}else{exit 1}}'
Это имеет преимущество, что оно будет хорошо работать для будущих версий, когда номер версии будет больше, чем 1
. $NF
в awk
означает, что последнее поле и /version/
означает, что сценарий будет работать на строках, соответствующих version
. Так, так как первая строка:
info: starting BleachBit version 1.0
awk
протестирует, больше ли последнее поле (1.0
) здесь, чем или равно одному и выйдет с 0
состояние (успех), если это - что означает, что следующий блок (&&
) будет выполняться, и Ваш сценарий остановится.
Вы могли также уплотнить всю вещь к:
bleachbit --version | head -n 1 | awk '{if($NF>=1){exit 1}else{exit 0}}' &&
wget -P ~/Downloads http://katana.oooninja.com/bleachbit/sf/bleachbit_1.0_all_ubuntu1204.deb &&
sudo dpkg -i ~/Downloads/bleachbit_1.0_all_ubuntu1204
, Но это прибывает за счет бедных эльфов.
Я поместил этот короткий сценарий вместе, который, кажется, работает на меня! Это также включает немного моего собственного бренда волшебного юмора. Я использую этот код в большем сценарии, таким образом, я могу скопировать и вставить это условное выражение где угодно, мне нужен он.
#!/bin/bash # Check BleachBit Version and install if necessary if [ "$(bleachbit --version | grep -c 'version 1.0')" = "0" ]; then wget -P ~/Downloads http://katana.oooninja.com/bleachbit/sf/bleachbit_1.0_all_ubuntu1204.deb sudo dpkg -i ~/Downloads/bleachbit_1.0_all_ubuntu1204.deb echo "$(tput setaf 2)The elves have installed BleachBit 1.0.$(tput sgr0)" else echo "$(tput setaf 2)The elves have verified the BleachBit version.$(tput sgr0)" fi
&&
, который может использоваться в сценарии, that' s, как я обычно делаю это, но да, не для больших блоков. Я, конечно, не использовал быgrep -c 1.0
, хотя, потому что это будет также соответствоватьversion 0.8.1.0
, например, и это будет соответствовать1.0
независимо от того, является ли это на самом деле даже частью строки версии. Напримерversion 0.7 revision 1.0
. – DiPix 17.05.2020, 19:14