0

我正在尝试从我的计算机中删除大量文件,并且我正在尝试使用该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
4

3 回答 3

6
  1. Shell 脚本根本不被编译。

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

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

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

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

于 2013-07-22T17:33:36.427 回答
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 originallyrm d which would just remove a file namedd` 。
  • if/then语句转换为if/else if.
  • 重写 [ $(expr "$1" % "$e3") -ne 0 ]
    • 不需要,expr因为 BASH 有$((..))语法。
    • 不需要测试命令 ( [),因为if自动将零评估为真,非零评估为假。
  • 添加了引号。
于 2013-07-22T20:27:06.213 回答
0

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

尝试修复此行:

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

使其如下所示:

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

于 2013-07-22T17:34:51.987 回答