ssh&中的条件命令贝壳& MySQL的

时间:2013-02-03 22:17:53

标签: mysql linux bash shell unix

我在shell脚本中有以下命令mysql dump,然后我将ssh上的SQL文件加载到远程数据库中,然后更新时间戳。

1. mysqldump -u root files path | gzip -9 > $SQL_FILE
2. cat $SQL_FILE | ssh -i ~/metadata.pem ubuntu@1.2.3.4 
    "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行的成功为条件运行?

2 个答案:

答案 0 :(得分:2)

你可以在一个区块内链接:

mysqldump -u root files path |
    gzip -9 |
     ssh -i ~/metadata.pem ubuntu@1.2.3.4 "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 :(得分:1)

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

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

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