linux-检查scp命令的状态代码,如果失败,则在另一台计算机上调用scp

以下是我的shell脚本代码段,在其中我正在执行scp命令以将文件从machineB复制到machineA.

for element in ${x[$key]}; do   # no quotes here
    printf "%s\t%s\n" "$key" "$element"
    if [ $key -eq 0 ]
    then
        scp david@machineB:/data/be_t1_snapshot/20131215/t1_$element_5.data /data01/primary/.
    fi    
done

我有一个非常简单的问题,在下面提到-

如果我的shell脚本中的以上scp命令由于任何原因使我出现此错误-没有此类文件或目录
然后我需要尝试从machineC进行scp,并且该scp命令将像这样,仅机器会有所不同,其他所有东西都将是相同的-

scp david@machineC:/data/be_t1_snapshot/20131215/t1_$element_5.data /data01/primary/.

所以我的问题是如何在我的shell脚本中检查上述scp命令的输出,然后决定是否需要从machineC调用scp命令?我是否可以使用某种状态检查,如果由于某种原因而失败,那么我可以在machineC上调用scp命令吗?

这可以在shell脚本中完成吗?

解决方法:

干得好:

for element in ${x[$key]}; do   # no quotes here
    printf "%s\t%s\n" "$key" "$element"
    if [ $key -eq 0 ]
    then
        scp david@machineB:/data/be_t1_snapshot/20131215/t1_$element_5.data /data01/primary/. || scp david@machineB:/data/be_t1_snapshot/20131215/t1_$element_5.data /data01/primary/
    fi    
done

如果操作成功,行为良好的命令将以“成功”(退出代码= 0)退出,否则,将以退出代码!= 0退出.可以将命令链接在一起,如下所示:

cmd && echo successful || echo failed
cmd && keep going || do something else

退出代码也存储在$?中.变量,因此等效:

cmd; if $? = 0; then echo successful; else echo failed; fi

不仅如此,命令的状态码在shell脚本中也非常重要.考虑以下两个示例:

./configure && make && make install
./configure; make; make install

如果所有命令均成功,则第一个命令将执行命令链.即使先前的命令失败,第二个命令也将始终执行所有命令.

上一篇:LINUX scp命令:服务器间的文件拷贝


下一篇:java-如何使用SSHJ通过SCP流式传输文件?