2015-03-13 44 views
5

我想写一个脚本来验证副本是否成功。 这是我有:Unix Shell脚本 - 验证副本是否成功

#!/bin/sh 
cp home/testing/present.txt home/testing/future.txt 
    echo "Copy Code: $? - Successful" 
if [ $? != 0 ]; then 
    echo "Copy Code: $? - Unsuccessful" 
fi 

的“if”语句不被初始化。如何解决这个问题? 谢谢你的时间。

回答

18

$?指的是最后的命令:

#!/bin/sh 
cp home/testing/present.txt home/testing/future.txt 
    echo "Copy Code: $? - Successful" # last command: cp 
if [ $? != 0 ]; then     # last command: echo 
    echo "Copy Code: $? - Unsuccessful" # last command: [ 
fi 

如果你想重复使用特定命令的状态工作,只是将结果保存到另一个变量:

#!/bin/sh 
cp home/testing/present.txt home/testing/future.txt 
status=$? 
echo "Copy Code: $status - Successful" 
if [ $status != 0 ]; then 
    echo "Copy Code: $status - Unsuccessful" 
fi 

然而,更好的方法是简单地首先测试cp命令:

if cp home/testing/present.txt home/testing/future.txt 
then 
    echo "Success" 
else 
    echo "Failure, exit status $?" 
fi 
+0

令人惊讶的简单和优雅。感谢您的解决方案。 – 2015-03-13 18:04:42

4

简化,简化,简化:

#!/bin/sh 
if cp home/testing/present.txt home/testing/future.txt; then 
    echo "Copy Code: $? - Successful" 
else 
    echo "Copy Code: $? - Unsuccessful" 
fi 

如果你想测试一个命令是否成功,请测试if声明状态。

请记住,$?是执行的最后一个命令的退出状态。它就像一个非常易变的全局变量(在C或C++中)。 在您的代码中,运行echo,该命令从cp命令中取消$?中的值。如果您需要明确地捕捉$?,明确地这样做,并立即对其状态需要捕获指令后:

cp home/testing/present.txt home/testing/future.txt 
cp_status=$? 
下面的代码

,然后测试$cp_status

+0

用伟大的Ric Flair的话说:“WOOOOOOOOOOOO” – 2015-03-13 18:04:00