对于Bash脚本中的循环

时间:2010-02-02 01:15:53

标签: bash

假设我们使用标准的bash术语来编写for循环,循环srm以安全地擦除驱动器上的项目。

现在假设我们将它设置为迭代10次,在第一次迭代完成后,它如何仍然可以在文件上工作?该文件应该不再存在,那么如何删除呢?不是特定于srm的问题,任何事情都可以运行。甚至像mv这样的东西,即使文件不再可用。

4 个答案:

答案 0 :(得分:3)

它将循环运行10次,但除了第一次迭代之外,您正在执行的命令将失败(并返回-1)。该命令还会写出它通常写出的任何错误消息(到stdout,stderr或文件)。

#!/bin/bash
for i in {1..5}
do
    rm something
done

现在,假设有一个名为something的文件,你得到:

rm: something: No such file or directory
rm: something: No such file or directory
rm: something: No such file or directory
rm: something: No such file or directory

请注意,自第一次rm成功运行以来,这种情况发生了4次,而不是5次。

答案 1 :(得分:3)

你做不到。一旦srm返回,文件就会消失。

而不是编写循环,您将需要调整srm的参数以在返回之前覆盖数据更多次。

根据Wikipedia writeup on srm,默认模式为35 pass Gutmann。这真的不够吗?

答案 2 :(得分:2)

srm为你做循环,然后删除驱动器,没有必要或能力从bash做你想要的。您必须使用某些特定于操作系统的API在C / C ++中编写一些与文件系统直接对话的内容。

答案 3 :(得分:2)

矫枉过正。只需使用shred --remove <file>;它容易了十几次。

如果你试图擦拭你的整个驱动器,那么系统性地证明了没有什么能比dd更让你感到沮丧并用零写你的驱动器。