2017-07-07 42 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