2014-01-22 3 views
1

Я создаю скрипт, который ищет файлы и подсчитывает их. Позже я использую это значение count для создания файлов резервных копий. Это то, что он выглядит следующим образом:Bash for loop return null stop program?

#!/bin/sh 
#LOCAL VAR PERFECTLY DEFINED 



if $estdifferent ; then 
     x=0; 
     for fic in `find $OTHERDIR/liste/ -type f -name "${filename}_bak*"` ; do 
     { 

      filename_tab[x]=$fic 
      ((x++)) 
     } 
     echo "tableau rempli, nombre de fichier bak : "$x 

Это кодоблок работает, когда «найти» найти хотя бы один файл, но не тогда, когда есть 0 файлов. Скрипт не достигает последнего «эха». Режим отладки останавливает сценарий по адресу:

echo differents 
differents 
true 
x=0 
find /tech/gtr/scripts/osm/scan-configs/liste/ -type f -name 'IDF-952584-S... 

Почему?

+0

Какой вкус и версия '/ bin/sh' это? Это недопустимый синтаксис 'bash'. Цикл 'for' выглядит как' for ...; do ... done', а не с блоком '{...}'. – twalberg

+0

Bash 4.1.2 (1) для redhat. Этот синтаксис «for» работает, когда найден файл :) –

ответ

0

Попробуйте заменить:

for fic in `find $OTHERDIR/liste/ -type f -name $filename"_bak"*`;do 
{ 
    echo $fic 
    filename_tab[x]=$fic 
    ((x++)) 
} 

по

for fic in `find $OTHERDIR/liste/ -type f -name $filename"_bak"*` ; do 
    echo $fic 
    filename_tab[x]=$fic 
    ((x++)) 
done 

пожалуйста?

+0

Отладка говорит: ++ find/tech/gtr/scripts/osm/scan-configs/liste/-type f -name find: missing argument to ' -name ' Но в нем также сказано несколько строк, что мой $ filename var не пуст –

+0

Кто-нибудь, пожалуйста? :( –

+1

@ user2564494 Это должно указывать на вашу проблему. Это не значит, что 'find' не находит ничего - символ' * 'в вашем шаблоне просматривается оболочкой и расширяется. Попробуйте использовать' -name '$ {filename} _bak * "вместо этого, поскольку цитирование предотвращает расширение glob. – twalberg