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

how to control a shell script loop with: 'dpkg -s pv | grep Status'

编码处女需要帮助 - 一旦安装了包pv,这段代码总是else而不是then。 为什么?

1
2
3
4
5
6
7
8
9
10
11
# 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的Rasberry pi,而pv是版本1.2.0,并且作者不可用。

谢谢。


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

我对这个版本好运

1
2
3
4
5
6
7
8
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

而不是捕获dpkg | grep管道的输出,只需检查其退出状态:

1
2
3
4
5
6
7
8
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

grep-q选项用于抑制任何匹配行的输出,因为您不需要查看它们。