Как управлять циклом сценария оболочки с помощью: 'dpkg -s pv | grep Status'
Пожалуйста, помогите кодированию virgin - после установки пакета pv этот код всегда делает else
скорее, чем then
, Зачем?
# First check if pv package is installed, if not, install it first
PACKAGESTATUS=`dpkg -s pv | grep Status`;
if [[ $PACKAGESTATUS == S* ]]
then
echo "Package 'pv' is installed."
else
echo "Package 'pv' is NOT installed."
echo "Installing package 'pv'. Please wait..."
apt-get -y install pv
fi
Примечание: это часть скрипта резервного копирования, который создает резервную копию Raspberry Pi, работающей на Raspbian wheezy. raspbian/2013-02-09
а пв это версия 1.2.0
и автор недоступен.
Благодарю.
2 ответа
Решение
Вместо того, чтобы захватить вывод dpkg | grep
трубопровод, просто проверьте его состояние выхода:
if dpkg -s pv | grep -q Status; then
then
echo "Package 'pv' is installed."
else
echo "Package 'pv' is NOT installed."
echo "Installing package 'pv'. Please wait..."
apt-get -y install pv
fi
-q
возможность grep
используется для подавления вывода любых совпадающих строк, так как вам не нужно их видеть.
В ответе chepners есть небольшая синтаксическая ошибка из-за двойного 'then'.
Мне повезло больше с этой версией
if `dpkg -s pv | grep -q Status;`
then
echo "Package 'pv' is installed."
else
echo "Package 'pv' is NOT installed."
echo "Installing package 'pv'. Please wait..."
apt-get -y install pv
fi