busyboxシェルスクリプト - 不明なオペランドエラーメッセージ

busyboxシェルスクリプト - 不明なオペランドエラーメッセージ

Pythonスクリプトを実行して結果を得るには、小さなシェルスクリプトを作成する必要があります。

この方法で実行しようとすると機能します。

#!/bin/sh
/usr/bin/python /etc/scripts/backup.py
result=$?

if [ $result -gt 0 ];
    then echo 'PROBLEM';
else
    echo 'OK';
fi

しかし、これをしようとすると失敗します。

#!/bin/sh
if [ $(/usr/bin/python /etc/scripts/backup.py) -gt 0 ];
    then echo 'PROBLEM';
else
    echo 'OK';
fi

次を返します。

lab-1:/etc/scripts# ./audit_test_wrapper.sh
sh: 0: unknown operand
OK

結果が間違っています。 「OK」の代わりに「PROBLEM」を印刷する必要があります。

私は今まで何を試しましたか

if [ $(/usr/bin/python /etc/scripts/backup.py) -ne 0 ];

返品

lab-1:/etc/scripts# ./audit_test_wrapper.sh
sh: 0: unknown operand
OK

私もこれを試しました:

if [ "$(/usr/bin/python /etc/scripts/backup.py)" -gt 0 ];

次を返します。

lab-1:/etc/scripts# ./audit_test_wrapper.sh
sh: out of range
OK

誰もが正しい方向に私を指すことができますか?

ありがとうございます。

ベストアンサー1

$?このコマンドは標準出力に終了ステータス()を返しません。コマンド置換($(...))は標準出力をキャプチャします。

代わりに

#!/bin/sh

if ! /usr/bin/python /etc/scripts/backup.py; then
   echo 'PROBLEM'
else
   echo 'OK'
fi

PROBLEMPythonスクリプトがゼロ以外の終了状態で終了すると、最初のブランチが選択されて印刷されます。

ifこれは「スクリプトが成功しなかった場合」と理解できます。

削除したい場合!

#!/bin/sh

if /usr/bin/python /etc/scripts/backup.py; then
   echo 'OK'
else
   echo 'PROBLEM'
fi

ifこの文は、「スクリプトが成功した場合」と解釈できます。


これ間違いあなたが得る結果は、スクリプトが何も出力しないという事実に由来します。これは、コマンド置換が空であることを意味します。引用しなかったため、シェルが実行しようとするコマンドは次のとおりです。

if [ -gt 0 ]

構文エラーです。

コマンド置換を引用した場合は、デフォルトで以下を実行しようとします。

if [ "" -gt 0 ]

そして、シェルは空の文字列を整数として比較することはできません。

おすすめ記事