有人可以帮我发现问题吗?
#!/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依赖项不会有任何问题(例如,更改一个目录的名称会搞乱更改它的子目录的名称)
感谢
答案 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