我有一个shell脚本,我正在使用这行代码执行循环遍历本地文件(.gz)并执行scp。如果可能,我想测试失败的scp
。我正在做一个循环,所以我可以将每个文件名回显给日志,以便我可以跟踪它。
有人可以告诉我如何检查失败的scp吗?或者更好的是,这是一个很好的代码示例吗?谢谢你的帮助。
for gzfile in $LOCALDMPDIR/*.gz
do
/usr/bin/scp -P 2222 -i $KEYFILE $gzfile foobar@$1:$TGTDIR
echo "$gzfile is done. " 2>&1
done
答案 0 :(得分:22)
使用$?访问最后一个命令的返回值。检查scp的手册页以进行验证,但我认为返回值为零意味着成功。非零值意味着某种失败。
答案 1 :(得分:9)
使用:
if [ $? -eq 0 ];
then
echo "OK"</br>
else
echo "NOK"</br>
fi
“[”之后和“]之前有空白。 不要围绕$?和0带引号
答案 2 :(得分:4)
您可以检查变量$?
以查看scp
的返回代码。如果它返回非零,则发生错误。
答案 3 :(得分:1)
您还可以尝试将错误捕获到日志中:
for gzfile in $LOCALDMPDIR/*.gz
do
/usr/bin/scp -P 2222 -i $KEYFILE $gzfile foobar@$1:$TGTDIR 2>>/var/log/scperror.log \
&& echo "$gzfile is done." \
|| echo "scp error: $gzfile"
done
答案 4 :(得分:0)
对于那些像我一样的人,他们花费的时间比平常更长时间搞乱格式化错误:
scp "fromHere" hostname:"toThere"
if [ "$?" -eq "0" ];
then
echo "SUCCESS"
else
echo "FAIL"
fi