2013-07-10 19 views
0

我有一個python腳本p.py它爲exit("ABC")對某些文件。我想編寫一個Ubuntu的外殼,這使得腳本exit("ABC")將文件複製到一個文件夾:有條件簽入殼

#!/bin/bash 

FILES=*.txt 
TOOL=p.py 
TAREGT=../TARGET/ 

for f in $FILES 
do 
    if [ $(python $TOOL $f) = "ABC" ] 
    then 
     echo "$f" 
     cp $f $TARGET 
    fi 
done 

但條件檢查if [ $(python $TOOL $f) = "ABC" ]似乎不工作,它說./filter.sh: line 13: [: =: unary operator expected。誰能告訴我什麼是錯的?

+1

這是一個 「打擊」 的腳本,而不是 「Ubuntu的」 腳本。無論你是在Ubuntu上運行,AIX還是Cygwin都不會使(大部分)有所不同。 (同樣,無論你在哪裏運行它,它都是一個「Python」腳本。) – DevSolar

回答

1

參數exit()是Python腳本返回(成功/錯誤)。 (Documentation Python的exit()的注意如何exit("ABC")不返回"ABC",但打印,爲stderr回報1。)

返回代碼是什麼在調用殼的$?變量結束,或您會測試這樣的內容:

# Successful if return code zero, failure otherwise. 
# (This is somewhat bass-ackwards when compared to C/C++/Java "if".) 
if python $TOOL $f 
then 
    ... 
fi 

$(...)結構被替換爲調用的腳本/ EXECUT的輸出能幹,這完全是另一回事。

如果你比較字符串,你得說出來了

if [ "$(python $TOOL $f)" = "ABC" ] 

或使用bash的改進的測試[[

if [[ $(python $TOOL $f) = "ABC" ]] 
+0

謝謝,但在我的'p.py'中,有幾種exit:'exit(「ABC」)'''exit 「DEF」)'等等,我怎麼能檢查shell中的不同可能性? – SoftTimur

+1

@SoftTimur:引用您正在使用的函數的[documentation](http://docs.python.org/2/library/sys.html#sys.exit)是一個好主意。對於exit(),任何非零/非空參數都表示腳本對任何調用者的失敗**。我嚴重懷疑這是你在找什麼,所以你的腳本應該輸出結果輸出併成功退出(即'exit(0)')。 – DevSolar

+1

@SoftTimur特別是,您的退出代碼應該是0到255之間的整數值(或-128到127,取決於您將它視爲有符號還是無符號 - 但它應該是單字節值)... – twalberg