验证复制是否成功

Verifying that a copy succeeded

我想写一个脚本来验证复制是否成功。 这是我拥有的:

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

"if" 语句没有被初始化。如何解决这个问题? 谢谢你的时间。

$?指的是最后一条命令:

#!/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

简化,简化,再简化:

#!/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