2013-02-03 41 views
2

我在shell脚本中执行以下命令,我在其中执行mysql dump,然后通过ssh将该SQL文件加载到远程数据库中,然后更新时间戳。ssh&shell&mysql中的条件命令

1. mysqldump -u root files path | gzip -9 > $SQL_FILE 
2. cat $SQL_FILE | ssh -i ~/metadata.pem [email protected] 
    "zcat | mysql -u 'root' -h 1.2.3.4 metadata" 
3. TIMESTAMP=`date "+%Y-%m-%d-%T"` 
4. mysql -u 'root' -h 1.2.3.4 metadata -e "UPDATE path_last_updated SET timestamp=DEFAULT" 

有没有什么办法来改善上述命令。例如,如果第2行发生故障(例如,由于连接问题),但第4行成功了会发生什么情况?

如何让第4行成功运行第2行?

+0

$?包含上次运行命令的int返回码。 0就是成功。 – diolemo

回答

2

你可以链都在一个块:如果某件事之前失败

mysqldump -u root files path | 
    gzip -9 | 
    ssh -i ~/metadata.pem [email protected] "zcat |\ 
        mysql -u 'root' -h 1.2.3.4 metadata" && 
    mysql -u 'root' -h 1.2.3.4 metadata -e " 
     UPDATE path_last_updated SET timestamp=DEFAULT" 

所以最后mysql命令将不会被执行。

1

您可以使用$?获取最后一条命令的返回码,如果不是0,则失败。

或者您可以使用&&例如:cmd1 && cmd2

或者如果发生错误,您可以使用set -e停止脚本。