带有if / else的Linux脚本

时间:2011-12-22 06:00:26

标签: shell

我正在通过运行java文件的Cron在ubuntu服务器上执行每日脚本。我希望它包含在if / else块中,这样如果java文件成功执行,它应该发送一条echo消息“successl”,如果失败,它应该发送一条echo消息“failed”。

以下是脚本updateGroupScores.sh

的现有行
java -classpath "/home/ubuntu/live/build/WEB-INF/lib/*:/var/lib/tomcat7/lib/*:/home/ubuntu/live/build/WEB-INF/classes/" com.generalsentiment.update.UpdateGroupScores > /var/gs/livecron/crongroupsentimentscores.log

我想修改它们像 -

if (java file runs successfull)
then
echo "cron job successfull"

else
then 
echo "cron job failed"

- 感谢

2 个答案:

答案 0 :(得分:1)

假设你的Shell是Bash:

使用$?

  • $?是包含上一个命令的返回码的变量(如果成功,则为0)

    java -classpath "/home/ubuntu/live/build/WEB-INF/lib/*:/var/lib/tomcat7/lib/*:/home/ubuntu/live/build/WEB-INF/classes/" com.generalsentiment.update.UpdateGroupScores > /var/gs/livecron/crongroupsentimentscores.log
    
    if [[ $? == 0 ]]
    then
        echo "cron job successful"
    else
        echo "cron job failed"
    fi
    

使用&&和||

  • && 如果上一次成功,则执行以下命令
  • || 如果上一次不成功,则执行以下命令

所以你可以用以下方式拖尾执行的行或命令:&& echo“cron job successful”|| echo“cron job failed”

答案 1 :(得分:0)

如果您可以依赖Java命令的退出状态,那么只需写下:

C1="/home/ubuntu/live/build/WEB-INF/lib/*"
C2="/var/lib/tomcat7/lib/*:/home/ubuntu/live/build/WEB-INF/classes/"
LOG="/var/gs/livecron/crongroupsentimentscores.log"

if java -classpath "$C1:$C2" com.generalsentiment.update.UpdateGroupScores > "$LOG"
then echo "cron job successful"
else echo "cron job failed"
fi

请注意,输出将邮寄给您(至少在某些系统上),或丢失到/dev/null。这些变量使得SO屏幕上的所有内容都更加合适;我也可能在常规脚本中使用它们,尽管这将是一个临界决定。

如果你不能依赖退出状态,你将不得不做其他事情来决定它是否成功,但无论如何,一般原则都是一样的。