在for循环中添加不起作用

时间:2013-11-18 16:03:55

标签: bash

我正在编写一个小脚本来计算文件的总大小。我有一个文件,其中包含我必须检查的文件列表,我遍历它们,我想打印出总大小。这是我到目前为止所做的,但由于某种原因,我得到0作为总数

for file in `cat $LISTFILES`
do

echo "Processing files: " $file
      actualsize=$(du -b "$file" | cut -f 1)
      sum=0
      sum=$sum+$actualsize
      echo $sum
done

echo 'done'
echo $sum

两个echo $sum都返回0 我似乎无法弄清楚出了什么问题。

2 个答案:

答案 0 :(得分:4)

您在每个步骤中归零sum

sum=0
while read file; 
do 
echo "Processing files: " $file
      actualsize=$(du -b "$file" | cut -f 1)
      # wrong syntax
      # sum=$sum+$actualsize
      # correct
      sum=$((sum+actualsize))
      echo $sum

done<"$LISTFILES" 
echo $sum

你的语法也错了:

你应该这样做:$((sum+actualsize))检查bash aritmetics

答案 1 :(得分:3)

您应该使用while read代替for ... $(...)while read更快,更不容易出错。另外,请参阅stat命令以获取文件大小。 stat命令可能因系统而异,请参阅您的联机帮助页。这是使用在BSD / Mac OS X上找到的那个.Linux可能是stat -c%s。这就是Linux手册在网上所说的内容。再次,使用man来解决这个问题。另外,要记住文件名中的空格。使用$file周围的引号来考虑这一点。

在回答你的问题时,你需要把数学放在$((....))

while read file #for file in `cat $LISTFILES`
do
    echo "Processing files: '$file'"
    actualsize=$(stat -f%x "$file")
    sum=0
    sum=$(($sum+$actualsize))
    echo $sum
done < $LISTFILES  #Assuming this is a file that contains the list...
echo 'done'
echo $sum