скрипт оболочки с циклом while и числовым тестом не работает - PullRequest
0 голосов
/ 07 июня 2011

Может кто-нибудь помочь мне определить проблему здесь?

#!/bin/sh

find . -name '*ABC*' > replace_temp.file
num_of_lines=`cat replace_temp.file | wc -l`
i=0
while $i<$num_of_lines
do
   tc=`expr $i + 1`
   line=`tail -$tc replace_temp.file |head -1`
   line1=$line
   sed -e 's/\(.*\)ABC/\1DEF/' $line
   #mv -f $line1 $line   
done 
#rm -f replace_temp.file

я получаю ошибку replace.sh: line 6: 20: No such file or directory

Цель этого скрипта: поиск и замена всех каталогов файлов, содержащих ABC в названии, на DEF

он проходит по строкам файла результатов поиска снизу вверх, поэтому проблем с зависимостями dir не будет (например, изменение имени одного каталога приведет к путанице при изменении имени его подчиненного каталога)

спасибо

Ответы [ 3 ]

4 голосов
/ 07 июня 2011
while $i<$num_of_lines

должно быть что-то вроде

while [ $i -lt $num_of_lines ]

или если вы настаиваете

while (($i < $num_of_lines))
1 голос
/ 07 июня 2011

Это должно быть

while [ $i -lt $num_of_lines ]
  do

done

или

while (( $i -lt $num_of_lines ))
  do

done

или

while test $i -lt $num_of_lines
  do

done

Вы выполняете бесконечный цикл, который никогда не обновлялся $i.Возможно, вы хотели бы сделать что-то вроде i=$((i+1)) внутри тела цикла или обновить $i любым другим способом.

0 голосов
/ 07 июня 2011

Использование for tc in ((1..$num_of_lines)); do ... ; done

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...