2013-07-22 98 views
0

我想從我的計算機中刪除大量文件,並且我正在嘗試使用rm命令編寫bash腳本來執行此操作。我想知道的是如何在bash中實現平等,以及爲什麼我的代碼(下面發佈)不能編譯。感謝您的幫助!使用bash在Unix中刪除文件

#!/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 
+1

請編輯您的問題,以包含您收到的任何錯誤消息。在你最後一行的附近,'如果[bash $ expr'$ i'...'看起來非常可疑。 .....你知道shell腳本並不真正編譯,對吧? ;-) 祝你好運。 – shellter

回答

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

0

Shell腳本不編譯它是一種腳本語言。

嘗試解決這一行:

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

讓它象下面這樣:

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

+0

'bash $'也可能是錯誤的。 –

+0

他可以使用'$()'或'$ []' –

+0

'$ []'是什麼意思? –

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
    • 不需要測試命令([),因爲if自動將零計算爲真並將非零計算爲假。
  • 添加引號。