【问题标题】:Verifying that a copy succeeded验证复制是否成功
【发布时间】:2015-05-16 07:32:18
【问题描述】:

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

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

“if”语句未初始化。如何解决这个问题? 感谢您的宝贵时间。

【问题讨论】:

    标签: shell if-statement conditional


    【解决方案1】:

    $?指最后一条命令:

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

    【讨论】:

    • 惊人的简单和优雅。感谢您的解决方案。
    • 在第一种方法中,最好将status=$? 与cp ... 命令放在同一行,以防止将来的任何更改覆盖status 变量中的值。跨度>
    【解决方案2】:

    简化,简化,简化:

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

    【讨论】:

    • 用伟大的 Ric Flair 的话来说:“WOOOOOOOOOOOO”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多