0

提前感谢您的帮助,这是课程作业,因此非常感谢您的进一步阅读/指导。

前几天我问了一个与我自己的删除/回收/恢复脚本有关的问题,我已经完成了删除和回收,并删除了一个备份文本文件以供稍后恢复使用。

但是,还原脚本并没有给我错误,而是在控制台中停止了。就像当我输入 # ~/Restore -n 时,光标会跳到没有通常的 # 的下一行,我必须手动关闭它。同样没有 -n 选项。-n 选项应该要求一个新的位置来恢复,没有它应该恢复到文件的原始位置。我会发布我的脚本,看看你们的想法。

#!/bin/bash
if [ "$1" == "-n" ]
then  cd ~/rubbish
  restore= grep $2 ~/store      
  filename= basename "$restore"
  echo "Type the files new location"
  read location
  location1 = "readlink -f $location"       
  mv -i $filename "$location1" /$filename       
else  cd ~/rubbish          
  restore= grep $2 ~/store      
  filename= basename "$restore"         
  mv -i $filename "$location1" $location            
fi

所以,~/rubbish 是我自己创建的目录,用作回收站,而 ~/store 是我的文本文件,它在删除时附加已删除的文件 readlink 详细信息。如有必要,我可以发布整个 3 个脚本吗?

非常感谢!

4

2 回答 2

2

如果您调用~/Restore -n它,它将转到该if部分并执行grep $2 ~/store. 由于没有参数$2,它将导致grep ~/store,它告诉 grep 在来自标准输入的输入中搜索“~/store”。

这就是您的脚本停止并等待输入的原因。

您可以测试第二个参数或$2用双引号括起来以确保 grep 获取正确数量的参数。更好的是,两者都做:1. 测试第二个参数2. 将 $2 括在双引号中。

还有几点:

  • 不要在周围放置空格=
  • 如果要捕获输出,请将命令括在反引号中
  • 目录和文件名之间没有空格

所以,你大概应该写

restore=`grep "$2" ~/store`
filename=`basename "$restore"`
echo "Type the files new location"
read location
location1=`readlink -f "$location"`
mv -i $filename "$location1/$filename"

我建议您查看bash 信息并遵循“书籍和资源”。

于 2012-11-23T22:21:26.693 回答
1

我很久以前写过其中的一篇,我今天仍在使用。我没有恢复脚本,因为我编写了它以便您可以打开桌面垃圾桶,右键单击并选择“恢复”。换句话说,它遵循 Linux “垃圾信息”标准。

http://wiki.linuxquestions.org/wiki/Scripting#KDE4_Command_Line_Trash_Can

于 2013-10-18T14:43:43.330 回答