回退备份文件shell脚本
时间: 2023-11-19 09:57:21 浏览: 63
以下是一个回退备份文件的Shell脚本:
```bash
#!/bin/bash
read -p "请输入备份文件所在目录的绝对路径:" backup_dir
read -p "请输入要回退的备份文件名:" backup_file
read -p "请输入要回退到的目录的绝对路径:" restore_dir
if [ ! -d "$restore_dir" ]; then
echo "目录不存在,请重新输入。"
exit 1
fi
if [ ! -f "$backup_dir/$backup_file" ]; then
echo "备份文件不存在,请重新输入。"
exit 1
fi
cp -rfp "$backup_dir/$backup_file" "$restore_dir"
echo "回退成功。"
```
该脚本会要求用户输入备份文件所在目录的绝对路径、要回退的备份文件名和要回退到的目录的绝对路径。然后,它会检查目录和文件是否存在,如果存在则将备份文件复制到指定目录中,完成回退操作。
相关问题
shell脚本退不出
根据提供的引用内容,问题中的shell脚本在读取到行值为2时退出了子进程,并捕捉到了退出码。子进程结束后,后面的程序也没有执行。这是预期的结果。但问题是脚本无法退出。
根据引用中的脚本代码,我们可以看到在退出子进程后,使用了条件判断来判断退出码是否为1,如果是1则继续退出脚本。但在这里我们需要注意的是,每次使用`$?`来获取上一个命令的退出码时,都会被刷新为最新的命令退出码。所以在条件判断中多次使用`$?`可能会导致不准确的结果。
为了解决这个问题,我们可以将子进程的退出码保存到一个变量中,然后在后续的条件判断中使用这个变量来避免`$?`被刷新的问题。
以下是一个修改后的示例脚本:
```shell
from cat ./data.txt | while read line
do
echo "================最开始============"
echo "$BASHPID"
echo "===================================="
echo "${line}"
cat ./data.txt | while read line
do
echo "================进入管道后============"
echo "$BASHPID"
echo "===================================="
echo "${line}"
if [ ${line} -eq 2 ]; then
exit_code=1
echo "未退出"
fi
echo "返回值"
echo "$exit_code"
echo "返回值"
if [ $exit_code -eq 1 ]; then
echo "导入失败退出1!"
exit 1
fi
done
#===这里不要加语句,否则返回值可能会在这里被改变===
if [ $exit_code -eq 1 ]; then
echo "导入失败退出2!"
exit 1
fi
echo "================出循环后============"
echo "$BASHPID"
echo "===================================="
echo "$?"
if [ $exit_code -eq 1 ]; then
echo "导入失败退出3!"
exit 1
fi
if [[ $exit_code -eq 1 ]]; then
echo "导入失败退出4!"
exit 1
fi
done
```
这样修改后的脚本将子进程退出码保存在变量`exit_code`中,并在后续的条件判断中使用该变量。这样就避免了使用`$?`时的刷新问题,可以正确判断退出码并退出脚本。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [shell exit 1退不出问题](https://blog.csdn.net/gegeyanxin/article/details/124152819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [shell编程 创建shell脚本 shell 基础语法 shell流程控制语法 shell函数](https://download.csdn.net/download/weixin_66328465/87212912)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
git 回退某个文件
要回退Git中的某个文件,可以使用以下步骤:
1. 使用`git log [文件名]`命令查看文件的提交历史,找到你想要回退到的特定版本的commit哈希值。
2. 使用`git reset <commit哈希值> [文件名]`命令进行回退。具体使用的命令参数取决于你想要实现的回退效果。
- 如果你只想回退文件到暂存区,可以使用`git reset --soft <commit哈希值> [文件名]`。
- 如果你想彻底回退文件,包括暂存区和工作区,可以使用`git reset --hard <commit哈希值> [文件名]`。
请注意,回退文件将影响到该文件之后的所有提交,因此请确保你了解回退的影响并谨慎操作。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)