2013-02-03 69 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停止腳本。