Shell-Script
busybox shell 腳本 - 未知操作數錯誤消息
我需要編寫一個小的 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 ]
並且外殼無法將空字元串作為整數進行比較。