$ 1または$ 2が空であることをテストするには、-zを使用します。 - BASH

$ 1または$ 2が空であることをテストするには、-zを使用します。 - BASH

同じスクリプトで複数のRAIDモニタリングを実行しており、変数がnullを返した場合はスクリプトから警告を送信するか、赤に変更したいと思います。

私は読んでみて、それを得たと思いますが、私の試みは決して失敗しません。

テストのためにgrepを失敗させ、これは失敗を引き起こしましたが、これまで失敗することはできませんでしたが、実際には常に通過しました。

テスト環境は次のとおりです。

var="$(sudo /usr/StorMan/arcconf GETCONFIG 1 LD 0 | grep Optimal)"
var1="$(sudo /usr/StorMan/arcconf GETCONFIG 1 LD 1 | grep fail)"

これは1つの変数に対して機能します。

if [ -z "$var" ]

頑張りました

if [ -z "$var" ] && [ -z "$var1" ]
if [ -z "$var" && -z "$var1" ]
if [[ -z "$var" && -z "$var1" ]]

役に立たないが、誰かが私が間違っていることをすぐに知ることができると確信して、時間をかけてこの記事を読んでくれてありがとう!

答え1

たとえば、||代わりに使用してください。&&

if [ -z "$var" ] || [ -z "$var1" ]

これバッシュマニュアル説明する:

そしてそしてまたはリストは、制御演算子で区切られた1つ以上のパイプシーケンスです。&&そして||、それぞれ。そしてそしてまたはリストは左の関連付けで実行されます。

答え2

お客様が求めている内容はすでに記載されています。

if [ -z "$var" ] || [ -z "$var1" ]; then
  echo "one or both are empty."
fi

しかし、これが唯一の用途であれば、変数に設定する必要がないという点は言及する価値があります。

if実際には、コマンドの終了ステータスを設定で直接確認できます。[ はい特殊なシェルトークンではないコマンドです。 (コマンドと全く同じですtest。参照man [

私が理解したところ、最初のコマンドの出力にはsudo「Optimal」を含める必要があり、2番目のコマンドの出力には「fail」を含める必要があります。それ以外の場合は、警告をトリガーすることです。

この問題を次のようにさらに明確に議論することができるようです。

if sudo /usr/StorMan/arcconf GETCONFIG 1 LD 0 | grep -q Optimal &&
   sudo /usr/StorMan/arcconf GETCONFIG 1 LD 1 | grep -q fail
then
  echo "All is well."
else
  echo "Error condition!"
fi

答え3

「どちらか」を空白のままにするには、ORを試してください||

if [ -z "$var" ] || [ -z "$var1" ]

...それは簡単ですか?

答え4

2つの解決策は次のとおりです。

if [[ -z $a || -z $b ]];      ### (not A) OR (not B)
if ! [[ $a && $b ]];          ### not (A and B)

携帯性が向上しました。

if [ -z "$a" ] || [ -z "$b" ];
if ! ( [ "$a" ] && [ "$b" ] );

このオプションは機能できますが、POSIXによって拒否されました(> 4つの引数:結果が指定されていません。):

if [ -z "$a" -o -z "$b" ];
if [ ! \( "$a" -a "$b" \) ];

関連情報