2014-12-24 89 views
0

我在Bash中編寫腳本,並且遇到了數組的總和元素的問題。我爲兩條路徑添加了df的數組結果。結果我想獲得數組的總和元素。數組的總和

use=() 
i=0 
for d in '$PATH1' '$PATH2' 
do 
    usagebck=$(du $d | awk '{print awk $1}') 
    use[i]=$usagebck 
    sum=0 
    for j in $use 
    do 
      sum=$($sum + ${use[$i]}) 

    done 

    i=$((i+1)) 

done 
echo ${use[*]} 
+0

你的問題是什麼? –

+0

變量不會用單引號擴展。所以''PATH''是字符串'$ PATH'。 –

+0

也沒有理由在這個腳本中寫入'usagebck'變量。 '$ use'只會給你數組中的第一個值。 –

回答

3

如果您du有選擇-s

use=() 
sum=0 
for d in "$PATH1" "$PATH2" 
do 
    usagebck="$(du -s "$d" | awk 'END{print $1}')" 
    use+=($usagebck) 
    ((sum+=$usagebck)) 
done 
echo ${use[*]} 
echo $sum 
+0

中寫入'for d'在這裏,沒有理由優先使用'$ {use [@]}''來代替'$ {use [@]}''。 – chepner

1

首先,採取du看看參數。在基於BSD的系統上,有-c這將給你一個總計。在GNU和BSD上,有-a參數,它將報告目錄的所有文件。

由於您已經在使用awk,爲什麼不盡在awk

$ du -ms $PATH1 $PATH2 | 
    awk 'BEGIN {sum = 0} 
     END {print "Total: " sum } 
     { 
      sum+=$1 
      print $0 
     }' 
  • du -ms指定我希望每個文件的總金額指定
  • BEGINawk程序之前被執行。這裏我正在初始化sum。這不是必須的,因爲創建時變量被認爲等於零。
  • END在主程序awk後執行。在這裏,我指定要打印sum
  • 之間的{ ... }是主要的Awk程序。兩行。第一行將第1列(文件的大小)添加到sum。第二行打印出整行。