2017-07-07 53 views
1

以下代碼產生錯誤「整數表達式預期」:如果或病症產生「整數表達預期」

for SOURCE_PATH in work/sources/*; do 
    git diff --exit-code &>/dev/null || SOMETHING_TO_COMMIT=$? 
    if [ "$SOMETHING_TO_COMMIT" -eq "0" ] || [ "$SOMETHING_TO_COMMIT" -eq "" ] ; then 
     echo "NOTHING TO COMMIT FOR $SOURCE_PATH"; 
    else 
     echo "COMMIT FOR $SOURCE_PATH" 
     git -C "$DIR/$SOURCE_PATH" commit -F ${COMMIT_MESSAGE_FILE} 
    fi 
done 

錯誤是上線if [ "$SOMETHING_TO_COMMIT" -eq "0" ] || [ "$SOMETHING_TO_COMMIT" -eq "" ] ; then。看來[ "$SOMETHING_TO_COMMIT" -eq "0" ][ "$SOMETHING_TO_COMMIT" -eq "" ]應該會產生整數。

如何解決這個問題?

回答

1

第二測試變量與空字符串(「」)進行比較,但使用當量只爲整數,因此應該將它更改爲=操作符:

if [ "$SOMETHING_TO_COMMIT" -eq "0" ] || [ "$SOMETHING_TO_COMMIT" = "" ] ; then 
3

您不需要將退出代碼存儲在變量中。如果git diff可以像最常見的Linux/Unix命令在失敗時返回一個非零退出代碼,你可以直接使用它的,如果有條件的

if ! git diff --exit-code &>/dev/null ; then 
    echo "NOTHING TO COMMIT FOR $SOURCE_PATH"; 

!運營商斷言,如果條件的真只有如果git diff而不是成功,並且沒有更改提交。你也應該改變你的腳本上,如果條件斷言真和else部分失敗,因爲

if git diff --exit-code &>/dev/null ; then 
    echo "COMMIT FOR ${SOURCE_PATH}" 
    git -C "$DIR/${SOURCE_PATH}" commit -F "${COMMIT_MESSAGE_FILE}" 
else 
    echo "NOTHING TO COMMIT FOR ${SOURCE_PATH}"; 
fi 

這使得它更具可讀性和效率。

+2

我接受了@netizen答案,因爲它是直接回答我的問題,但我給予好評你的! – bux

1

兩個電流之間答案,有一種意識,你不必有條件地分配到SOMETHING_TO_COMMIT。只需將參數的退出狀態(零或不)分配給參數;那麼它保證有一些非空的整數值。

git diff --exit-code &>/dev/null; SOMETHING_TO_COMMIT=$? 
if [ "$SOMETHING_TO_COMMIT" -eq 0 ]; then 
    echo "NOTHING TO COMMIT FOR $SOURCE_PATH"; 
else 
    echo "COMMIT FOR $SOURCE_PATH" 
    git -C "$DIR/$SOURCE_PATH" commit -F ${COMMIT_MESSAGE_FILE} 
fi 

由於Inian指出的那樣,你並不需要保存,如果你只打算做一個比較退出狀態;您可以使用git命令本身作爲if條件。保存的值是非常有用的,當你可能需要做出多個比較:

some_command; status=$? 
if [ "$status" -eq 0 ]; then 
    ... 
elif [ "$status" -eq 1 ]; then 
    ... 
else 
    ... 
fi