如何在if语句之类的条件下编写命令?

时间:2017-12-19 06:56:33

标签: linux makefile

我想将命令编写为条件语句if if,当命令执行时没有任何错误,它应该打印成功,如果失败则失败。 我甚至试图阻止打印命令的长控制台消息。 下面是我正在使用的代码,它完美地工作,没有任何条件语句,如打印成功或失败消息。

$(BASENAME).pdf: $(BASENAME).ps
    ps2pdf $(BASENAME).ps $(BASENAME).pdf  

$(BASENAME).ps: $(BASENAME).dvi
    dvips -Ppdf $(BASENAME).dvi -o $(BASENAME).ps

我尝试将上面改为

$(BASENAME).pdf: $(BASENAME).ps
    @out=ps2pdf $(BASENAME).ps $(BASENAME).pdf > /dev/null 2>&1 && echo "    5. ps2pdf successful" || echo "    5. ps2pdf failed"

$(BASENAME).ps: $(BASENAME).dvi

    dvips -Ppdf $(BASENAME).dvi -o $(BASENAME).ps  > /dev/null 2>&1\
    if [ $? -eq 0 ];\
            then \
            echo "    4. dvips successful";\
    else \
            echo "    4. dvips failed";\
            exit 2;\
    fi

这使我的执行失败,并在运行代码时向我提供错误,如下面的错误

dvips -Ppdf basename_04.dvi -o basename_04.ps \
if [ basename_04.dvi -eq 0 ];\
        then \
        echo "    4. dvips successful";\
else \
        echo "    4. dvips failed";\
        exit 2;\
fi
/bin/sh: -c: line 2: syntax error near unexpected token `then'
/bin/sh: -c: line 2: `      then \'
make: *** [basename_04.ps] Error 1

即使用分号更新后,我也会遇到错误。

dvips -Ppdf nkukunur_04.dvi -o nkukunur_04.ps  > /dev/null 2>&1 ;\
      if [ nkukunur_04.dvi -eq 0 ]; \
              then \
              echo "    4. dvips successful"; \
      else \
              echo "    4. dvips failed"; \
              exit 2; \
      fi
/bin/sh: line 1: [: nkukunur_04.dvi: integer expression expected
    4. dvips failed

请帮我解决问题。

1 个答案:

答案 0 :(得分:0)

所以,我不知道使用conditional directives与使用普通Bash条件的最佳做法是什么。但要修复代码,请在第一行后删除反斜杠:

dvips -Ppdf $(BASENAME).dvi -o $(BASENAME).ps <<<< removed backslash
if [ $? -eq 0 ];\
        then \
        echo "    4. dvips successful";\
else \
        echo "    4. dvips failed";\
        exit 2;\
fi

否则所有行都作为单个bash语句执行:if直到分号作为参数传递给dvips并且then开始一个新语句,因此意外的令牌错误