Как управлять циклом сценария оболочки с помощью: '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
Другие вопросы по тегам