带有“while”循环和数字测试的shell脚本不起作用

时间:2011-06-07 16:11:29

标签: linux shell unix scripting

有人可以帮我发现问题吗?

#!/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 个答案:

答案 0 :(得分:4)

while $i<$num_of_lines

应该是

while [ $i -lt $num_of_lines ]

或者如果你坚持

while (($i < $num_of_lines))

答案 1 :(得分:1)

应该是

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

答案 2 :(得分:0)

使用for tc in ((1..$num_of_lines)); do ... ; done