この質問にはすでに回答済みの有力な候補がいくつかあり、私はこの問題を解決するためにいくつかの方法を試しました。具体的には、私のシナリオは次のとおりです。
Linuxマシンにインストールされている可能性がある、またはインストールされていない可能性のあるユーティリティ名の配列(例:ssh、sudoなど)があるため、呼び出しを試みた結果に基づいてユーティリティが存在するかどうかを確認しようとしています次にユーティリティ。私はbashでこれをやろうとしています。Bash のバージョンは 4.1.5(1) で、Ubuntu 10.10 で実行されていますが、BusyBox に展開する予定です。
ユーティリティが存在しない場合は、通常、「見つかりません」というメッセージが表示されるか、正確な文字列が含まれています。それ以外の場合は、使用法に関するメッセージが表示されます。使用する grep に対していくつかの正規表現を試しましたが、何の違いもありませんでした。そのため、私のコードにはもっと根本的な欠陥があると思われます。
これを行うユーティリティがあることは十分に認識していますが、私が作業している環境では、ユーティリティ/パッケージをチェックするための dpkg などにアクセスできません。要するに、これを展開する予定の環境にはパッケージ管理がありません。
私が持っているものは大まかに次のようになります:
#!/bin/bash
TOOLS=( 'ssh' 'soodo' 'dhclient' 'iperf')
#list of tools is abridged for convenience and added 'soodo' as a sure miss
#add a ridiculous option flag so don't accidentally trip any real flags
if `echo ${TOOLS[0]} -222222 | grep -q "not found"`; then
echo "${TOOLS[0]} is not installed."
else echo `${TOOLS[0]} --version`
#I am aware that --version is not applicable for all utilities, but this is just
#for sake of example.
私の問題は、 if never が正確にピックアップされているように見えないことです。`マークをいじると、ifで偽陽性または偽陰性が作成されます(たとえば、soodoのようなプログラムは存在しないのに存在すると主張され、sshのようなものはインストールされていてもインストールされていないと報告されます) .
私がやろうとしていることなどについてさらに説明が必要な場合は、お尋ねください。それは、他の人からの洞察と引き換えに私が提供できる最低限のものです.