2013-08-10 3 views
0

Я пытаюсь выполнить этот простой скрипт в solaris. Я хочу сортировать (числовые) имена файлов в исходном каталоге и копировать файл один за другим в другой каталог. И я хочу напечатать сообщение после копирования каждые 100 файлов.solaris simple bash script

#!/bin/bash 

count=0 

for i in `ls | sort -n` 
do 
cp $i ../target 
count = $((count+1)) 
if[ $count%100 -eq 0 ] 
then 
    echo $count files copied 
    sleep 1 
fi 

done 

это не работает. Я пробовал разные вещи после поиска в сети.
я получаю ошибки, как это - ошибку

синтаксиса в строке 8:.. «(» Неожиданная ошибка
синтаксиса в строке 10: «тогда» неожиданная ошибка
синтаксиса в строке 13: «фи» неожиданные и т.д.

в чем проблема с этим сценарием

Баш версия - GNU Баш, версия 3.00.16 (1) -release (СПАРК-ВС-solaris2.10)

ответ

0

count=$((count+1))

if [ `echo $count % 100 | bc` -eq 0 ] 

Внесите эти исправления.

Edit: Пожалуйста, попробуйте

count=`expr $count + 1` 
+0

Спасибо. 'count = $ ((count + 1))' выдает эту ошибку синтаксиса ошибки в строке 8: count = $ 'неожиданно. 'if' работал. –

+0

Plz см. Редактировать. Благодарю. –

+0

'count = \' expr $ count + 1 \ '' и 'count = \' echo "$ count + 1" | bc \ '', отправленные idfah, оба работали. –

2

Основная проблема со сценарием является интервал. У вас есть пространство, где вы не должны иметь их:

(wrong) count = $((count+1)) 
(right) count=$((count+1)) 
(better) ((count++)) 

и вам не хватает места, где нужно их:

(wrong) if[ $count%100 -eq 0 ] 
(right) if [ $((count % 100)) -eq 0 ] 
(better) if ((count % 100 == 0)) 

count = $((count+1)) пытается выполнить команду count передавая ему два аргумента, = и значение count+1. if[ ... пытается выполнить команду if[, потому что [ является действительным символом слова; он автоматически не запускает новый токен.

Сказав это, я озадачен сообщением об ошибке unexpected (. Может ли ваш bash быть слишком старым, чтобы распознать синтаксис $((? Возможно. Это очень старый баш.

+0

Спасибо. Получили эти ошибки - счетчик ++: не найден, синтаксическая ошибка в строке 8: 'count = $ 'неожиданно и т. Д. По какой-то причине эти вещи не работают. может быть, это очень старый баш? –

+0

@ KarthiPk: Это довольно старый баш. Я подозреваю, что у него нет арифметического расширения. Работает 'let count ++'? – rici

+0

К сожалению, «пусть» тоже не работал –

0

Здесь я вижу несколько ошибок. Во-первых, вам нужны двойные кавычки около $i, если у них есть специальные символы.

Во-вторых, вы никогда не должны использовать

for i in `ls | sort -n` 

Вместо этого, попробуйте следующее

ls -1 | sort -n | while read i 

В-третьих, изменить ваш, если заявление

if ((count%5 == 0)) 

Синтаксис (( является баш выполняется только для целочисленной математики.

В-четвертых, изменить приращение счетчика на

((count++)) 

Это более кратким. Кроме того, пространство в вашей версии может нарушить ситуацию. Помните, что пробелы имеют значение.

+0

Спасибо. 'while' работал. 'if ((count% 5 == 0))' и '((count ++))' дает эти ошибки - count% 5: не найдено и count ++: не найдено –

+0

Хм, возможно, действительно старая версия bash. Вы можете попробовать '' count = 'echo '$ count + 1" | bc '' 'и' 'if [' echo '$ count% 100 | bc' -eq 0] '' – idfah

+0

Странно, я думаю, что арифметика должна работать в bash 3. У вас есть '#!/bin/bash' или' #!/bin/sh' в верхней части вашего скрипта? У вас есть режим posix? Проверьте с помощью 'set -o' – idfah