使用bash删除Unix中的文件

时间:2013-07-22 17:30:57

标签: bash unix

我正在尝试从我的计算机中删除大量文件,而我正在尝试使用rm命令编写一个bash脚本。我想知道的是如何在bash中做相等,以及为什么我的代码(在下面发布)不会编译。谢谢你的帮助!

#!/bin/bash
# int-or-string.sh
b="0000"
c="linorm"
f=500
e1=2
e2=20
e3=200
e4=2000
for i in {0..10000}
 do
  a=$(($f*$i))
  if ["$i" -eq "$e1"]
   then
   b="000"
   echo $b$
  fi
  if ["$i" -eq "$e2"]
   then
   b='00'
  fi
  if ["$i" -eq "$e3"]
   then
   b='0'
  fi
  if ["$i" -eq "$e4"]
   then
   b =''
  fi
  if [bash$ expr "$i" % "$e3$ -ne 0]
   then
   d = $b$c$a
   rm d
  fi
done

3 个答案:

答案 0 :(得分:6)

  1. 根本不编译Shell脚本。

  2. 您需要[之后和]之前的空格。

    if [ "$i" -eq "$e1" ]
    
  3. 那里有一个你可能根本不想要的错误bash$。它可能应该是$()运算符:

    if [ $(expr "$i" % "$e3") -ne 0 ]
    
  4. bash中=周围不能有空格。例如,将b =''更改为b='',将d = $b$c$a更改为d=$b$c$a

  5. echo $b$看起来应该是echo $b

答案 1 :(得分:0)

Shell脚本不编译它是一种脚本语言。

尝试修复此行:

if [bash$ expr "$i" % "$e3$ -ne 0]

如下所示:

if [ $(expr "$i" % "$e3$") -ne 0 ]

答案 2 :(得分:0)

  • 方括号周围需要空格。 [实际上是一个命令,就像所有命令都需要用空格描述一样。
  • 在shell中设置变量值时,不要在等号周围加上空格。
  • 在进行比较时使用引号并设置值以帮助描绘您的值。
  • 如果if条件都不成立且未设置$b,会发生什么。
  • 此代码背后的逻辑是什么?它似乎是一堆随机的东西。您将$从1递增到10000,但仅在其中四个值上设置$b的值。每200个步骤,您删除一个文件,但$b可能会也可能不会设置,即使它是文件名的一部分。
  • 你自己写过这个节目吗?你试过试试吗?你得到了什么错误?您是否查看了这些错误引用的行。看起来您将bash$提示作为命令的一部分包含在内。

有很多错误,我已经清理了大部分错误。清理过的代码发布在下面,但它并不意味着它会做你想要的。你所说的就是你要删除计算机上的“大量文件”,但没有给出其他标准。你还说“我想知道的是如何在bash中做平等”这不是你在标题中说明的问题。

这是代码。请注意这些更改,它可能会导致您正在寻找的任何答案。

#!/bin/bash
# int-or-string.sh
b="0000"
c="linorm"
f=500
e1=2
e2=20
e3=200
e4=2000
for i in {0..10000}
do
    a=$(($f*$i))
    if [ "$i" -eq "$e1" ]
    then
        b="000"
    elif [ "$i" -eq "$e2" ]
    then
        b='00'
    elif [ "$i" -eq "$e3" ]
    then
        b='0'
    elif [ "$i" -eq "$e4" ]
    then
        b=''
    fi
    if ! $(($i % $e3))
    then
        d="$b$c$a"
        rm "$d"
    fi
done

错误:

  • []
  • 周围的空格
  • rm "$d" command was originally rm d which would just remove a file named d`。
  • if/then语句已转换为if/else if
  • 重写了[ $(expr "$1" % "$e3") -ne 0 ]
    • 由于BASH具有expr语法,因此无需$((..))
    • 不需要 test 命令([),因为if会自动将0评估为真,非零评估为假。
  • 添加了引号。