Bashスクリプトで、パラメータにブール値(「true」または「false」)があることを確認したいと思います。
私はこれを2つのスクリプト、2つの異なる方法で試していますが、どちらも失敗します。
私は多くのStack Exchangeプロンプトをチェックし、それが私がしなければならないことをやっていると思いますが、そうではありません。
if [ "$2" != "true" ] -a [ "$2" != "false" ]; then
echo "Indiquez si Geoserver est en installation initiale (false) ou update (true)" >&2;
exit 1;
fi
メッセージで失敗Geoserver.sh: 12: [: true: unexpected operator
if [[ "$3" != "true" && "$3" != "false" ]]; then
echo "Indiquez si Kafka est en installation initiale (false) ou update (true)" >&2;
exit 1;
fi
失敗したKafka.sh: 18: [[: not found
答え1
標準的なアプローチは
[ "$3" != "true" ] && [ "$3" != "false" ]
つまり、2つの[
コマンドが実行され、各コマンドはテストを実行し、&&
シェルの演算子に関連付けられます。
[[...]]
機能豊富な多くのシェルでサポートされているkshの特殊な非標準シェル構文で、通常は&&
括弧をサポートしています。として構築されていないbash
限りbash
利用可能でなければなりません--disable-cond-command
が、エラーメッセージのフレーズによると、シェルを使用することをお勧めしますdash
。bash
を使用してビルドすると、エラー--disable-cond-command
はとGeoserver.sh: 12: [: too many arguments
ですKafka.sh: 18: [[: command not found
。
-a
[
以前のバージョンとの互換性のためにサポートされていますが、使用されなくなり、[ "$2" != "true" -a "$2" != "false" ]
設計上破損しています(-o
相手と同様)。または)を使用しないでください。
これは複雑です。
答え2
bash
どちらのエラーもまったく使用せず、代わりにパフォーマンスが低下するシェルを使用していることを示しますdash
。
また、最初の例では、「and」句を誤って実装しました。
私はこれがあなたが望むものであり、本当に使用したい場合はうまくいくべきだと思いますbash
。
if [ "$2" != "true" -a "$2" != "false" ]; then
好ましい方法は、次の移植性の高いオプションである傾向があります。
if [ "$2" != "true" ] && [ "$2" != "false" ]; then
2番目の例のエラーは、対応する[[ ]]
表記をサポートするシェルを使用していないことを示します。[ ] && [ ]
上記のスタイル表記に変更すると、より多くの成功を収めることができます。