У меня есть простой bash-скрипт, который является частью собственного веб-приложения, которое я разработал.
Его цель - автоматизировать удаление миниатюр изображений, когда исходное изображение было удалено пользователем.
Сценарий записывает некоторую базовую информацию о состоянии в файл /var/log/images.log
#!/bin/bash
cd $thumbpath
filecount=0
# Purge extraneous thumbs
find . -type f | while read file
do
if [ ! -f "$imagepath/$file" ]
then
filecount=$[$filecount+1]
rm -f "$file"
fi
done
echo `date`: $filecount extraneous thumbs removed>>/var/log/images.log
Хотя скрипт правильно удаляет большие пальцы, он неправильно выводит количество удаляемых больших пальцев, он всегда показывает 0
.
Например, просто вручную создав несколько потерянных миниатюр, а затем запустив мой сценарий, созданные вручную потерянные большие пальцы удаляются, но журнал показывает:
Чт, 9 июня 23:30:12 BST 2011: удалено 0 посторонних пальцев
Что я делаю неправильно, что мешает $ filecounter показывать число, отличное от нуля, когда файлы удаляются .
Я создал следующий bash-скрипт для проверки этого, и он отлично работает, выводя 0
затем 1
:
#!/bin/bash
count=0
echo $count
count=$[$count+1]
echo $count
Edit:
Спасибо за ответы, но почему работает следующее
$ x=3
$ x=$[$x+1]
$ echo $x
4
... а также работает второй пример, но в первом сценарии он не работает?
Второе редактирование:
Это работает
count=0
echo Initial Value $count
for i in `seq 1 5`
do
count=$[$count+1]
echo $count
done
echo Final Value $count
Initial Value 0
1
2
3
4
5
Final Value 5
как и замена count=$[$count+1]
на count=$((count+1))
, но не в моем исходном скрипте.