我正在尝试从我的计算机中删除大量文件,而我正在尝试使用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
答案 0 :(得分:6)
根本不编译Shell脚本。
您需要[
之后和]
之前的空格。
if [ "$i" -eq "$e1" ]
那里有一个你可能根本不想要的错误bash$
。它可能应该是$()
运算符:
if [ $(expr "$i" % "$e3") -ne 0 ]
bash中=
周围不能有空格。例如,将b =''
更改为b=''
,将d = $b$c$a
更改为d=$b$c$a
。
echo $b$
看起来应该是echo $b
。
答案 1 :(得分:0)
Shell脚本不编译它是一种脚本语言。
尝试修复此行:
if [bash$ expr "$i" % "$e3$ -ne 0]
如下所示:
if [ $(expr "$i" % "$e3$") -ne 0 ]
答案 2 :(得分:0)
[
实际上是一个命令,就像所有命令都需要用空格描述一样。 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 ]
。
expr
语法,因此无需$((..))
。[
),因为if
会自动将0评估为真,非零评估为假。