修复交互式备份脚本中的条件

我做了一个简单的备份脚本

代码 :

function backups_remove_file
{
    echo ""
    echo "2. Make Backups Of Files(s)"
    echo ""
    echo "Which File You Wanna To Make Backups?"
    read back
    echo "What's The File's Name Should Be After Backups? And Where?"
    read after
    read -p "Continue (y/n)?" CONT1
    if [ "$CONT1" == "y" ]; then
        tar -cvpzf "$after.tar.gz" "$back"
        echo "Backups File Successful !" ;
    else
        echo "Backups File Unsuccessful !" ;
    fi
}

但是有一个小问题我无法解决。. 当它显示

Which File You Want To Make Backups?

如果您在那之后写例如“测试”,然后为下一个问题

What's The File's Name Should Be After Backups? And Where?

如果你写例如“test1”,那么如果他们想继续,就会有一个安全问题,如果输入y,它将输出:

taking: test: can not state: No such file or directory
tar: Exiting with failure status due to previous errors
 Backups File Successful!

这种情况下的输出应该是 Backups File Unsuccessful!。. 在这种情况下,我应该怎么做才能获得预期的输出?

1
08.04.2019, 21:24
3 答案

我认为更好的脚本会读取命令行输入 -类似于 :

#/bin/bash echo "将 $1 备份为 $2 -如果这不是您想要的,请按 Ctrl -C 退出" 睡觉 3 echo "正在备份..." 焦油 -cvpzf $2.tar.gz $1 echo "1 美元的备份完成" 通知 -发送 -t 8000 “备份 1 美元完成” 出口 

然后你可以输入这样的命令 :

命令“/路径/到/输入”“/路径/到/输出” 

notify -send 也会发送图形通知,所以它会在完成时通知您。.

这只是我的建议 -我一会儿再看看你的建议...


你的脚本的问题是这样的。. 会说successful,因为$CONT1 = y ,所以会执行backup tar... 命令,然后echo Success . 如果您输入 continue 参数而不是 y ,它只会回显不成功。. 所以对于这个特定的脚本,更好的结局是 (这只会改变终端输出 ):

中的 echo 编辑的内容 如果 [ "$CONT1" == "y" ]; 然后 焦油 -cvpzf "$after.tar.gz" "$back" echo "备份文件完成!" ; 别的 echo "没有备份" ; 菲 出口 

这似乎有效 :

#!/bin/bash 回声“” echo "你要备份哪个文件?"; 读取输入 echo "你想把它备份到哪里?(包括.tar.gz 扩展名 )"; 读取输出 阅读-p“继续(是/否)?”继续 如果 [ "$CONT" == "y" ]; 然后 焦油 -cpf "$input" "$output" || 'echo "备份失败" && exit;' echo "备份成功!" 别的 echo "没有备份" ; 菲 出口 

|| 命令后表示只会执行 'echo "Backing Up Failed" && exit;' 如果命令产生错误,这将导致它回显它已失败,然后退出。. 如果命令没有产生错误,它将忽略它,回显成功,然后退出。.

这可能对某些文件的路径有问题,因此您可能需要使用我建议的其他脚本...

希望这可以帮助。.

2
12.03.2019, 05:43

供参考,如果有人来这里。.

在终端粘贴 :/path/to/your/copy/folder/CopyCmd 覆盖删除

您可以看到仅运行 /path/to/your/copy/folder/CopyCmd

-的命令列表 121 ---456955 -

我在您的脚本中添加另一个 if 条件。. 它会如你所愿。. 请参阅下面的修改后的脚本。.

 #!/bin/bash 功能备份 _删除 _文件 (){ echo "备份文件 (s )" echo "您要备份哪个文件?" 回过头再读 echo "备份后的文件名应该是什么?在哪里?" 读后 阅读 -p “继续 (是/否 )?” 继续1 如果 [ "$CONT1" == "y" ]; 然后 焦油 -cvpzf "$after.tar.gz" "$back" 如果 [ $? == 0]; 然后 echo "备份文件成功!" 别的 echo "备份文件不成功!" 1号出口 菲 别的 echo "备份文件不成功!" 菲 } 备份 _删除 _文件 

美元? 将最后一个命令的退出状态存储在 shell 上。. 如果成功,它将是 0

2
12.03.2019, 05:43

这有效 :

功能备份 _删除 _文件 { 回声“” echo "2. 备份文件 (s )" 回声“” echo "您要备份哪个文件?" 回过头再读 echo "备份后的文件名应该是什么?在哪里?" 读后 阅读 -p “继续 (是/否 )?” 继续1 如果 [ "$CONT1" == "y" ]; 然后 如果焦油 -cvpzf "$after.tar.gz" "$back"; 然后 echo "备份文件成功!" 别的 echo "备份文件失败!" 菲 别的 echo "用户选择否" 菲 } 

原因是 tar... 之后的行无论退出代码如何都会运行。. 这意味着它将始终回显“成功”。. 如果出现问题,Bash 不会自动引发异常/错误。.

这可以通过在 if 语句中使用 tar... 来解决,因此它的退出代码会影响从 if 语句形成的路径。.

1
12.03.2019, 05:43

標籤

相關問題