Shell-Script

busybox shell 腳本 - 未知操作數錯誤消息

  • November 5, 2019

我需要編寫一個小的 shell 腳本來執行 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

結果是錯誤的。它應該列印“問題”而不是確定。

到目前為止我嘗試過的

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

有人可以指出我正確的方向嗎?

謝謝。

命令不會$?在標準輸出上返回其退出狀態 ( )。命令替換 ( $(...)) 擷取標準輸出。

相反,只是做

#!/bin/sh

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

PROBLEM如果 python 腳本以非零退出狀態退出,這將選擇第一個分支並列印。

您可以將聲明讀if作“如果腳本沒有成功”。

如果你想擺脫!

#!/bin/sh

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

您可以將if聲明閱讀為“如果腳本確實成功”。


您得到的錯誤來自腳本沒有輸出任何內容,這意味著命令替換將為空。由於它沒有被引用,shell 將嘗試執行的命令看起來像

if [ -gt 0 ]

這是一個語法錯誤。

引用命令替換時,您實際上是嘗試執行

if [ "" -gt 0 ]

並且外殼無法將空字元串作為整數進行比較。

引用自:https://unix.stackexchange.com/questions/452231