如何使用以下命令控制shell脚本循环:'dpkg -s pv | grep状态'

时间:2013-03-22 11:29:22

标签: bash grep dpkg

编码处女需要帮助 - 一旦安装了包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

它是备份脚本的一部分,它备份运行Raspbian wheezy raspbian/2013-02-09并且pv是版本1.2.0且作者不可用的覆盆子pi。

感谢。

2 个答案:

答案 0 :(得分:1)

不要捕获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的{​​{1}}选项用于抑制任何匹配行的输出,因为您不需要看到它们。

答案 1 :(得分:1)

由于双重'然后',因此在chepners回答中存在轻微的语法错误。

我对这个版本好运

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