1

処女のコーディングには助けが必要です-パッケージ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

nbこれは、Raspbianwheezyを実行しているraspberrypiをバックアップするバックアップスクリプトの一部でありraspbian/2013-02-09、pvはバージョン1.2.0であり、作成者は利用できません。

ありがとう。

4

2 に答える 2

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

toの-qオプションgrepは、一致する行を表示する必要がないため、それらの行の出力を抑制するために使用されます。

于 2013-03-22T12:48:28.443 に答える
1

'then'が二重になっているため、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
于 2013-09-04T20:41:53.157 に答える