我想用
中的所有文件运行obj2opengl.pl/用户/ KanZ /桌面/项目/测试/型号/对象
名称为A001.obj A002.obj ... 运行脚本后,我将获得A001.h A002.h ......我想将这些文件移到
/用户/ KanZ /桌面/项目/测试/型号/报头
我如何在下面修改此代码 *问题是A $ {i} .obj和A $ {i} .h
cd /Users/KanZ/Desktop/Project/Test/Model/Object
start=1
n=$(find . -name "*.obj" | wc -l)
end=$(($n));
for((i=$start;i<=$end;i++))
do
./obj2opengl.pl "A${i}.obj"
mv "A${i}.h" /Users/KanZ/Desktop/Project/Test/Model/Header
done
如果我使用if语句调整我的代码,如何修复此代码以获得正确的语法例如:
cd /Users/KanZ/Desktop/Project/Test/Model/Object
start=1
a=0
b=0
c=1
n=$(find . -name "*.obj" | wc -l)
end=$(($n));
for((i=$start;i<=$end;i++))
do
./obj2opengl.pl "A${a}${b}${c}.obj"
mv "A${i}.h" /Users/KanZ/Desktop/Project/Test/Model/Header
c++
if[$c > 9] then
b++
c=0
fi
if[$b>9] then
a++
b=0
c=0
fi
done
答案 0 :(得分:0)
cd /Users/KanZ/Desktop/Project/Test/Model/Object
find . -name "A*.obj" -exec obj2opengl.pl {} \;
find . -name "A*.h" -exec mv {} /Users/KanZ/Desktop/Project/Test/Model/Header \;
答案 1 :(得分:0)
if[$c > 9] then
b++
我认为这是语法错误。 [
是shell中的命令,它需要一个或多个args,最后一个arg必须是[
,所以你必须使用空格来分隔命令和args,并且还需要{{1}之间的空格}和if
。
另一个错误,shell不支持c样式[
,您可以使用++
。
这是正确的代码:
b=$[b+1]
答案 2 :(得分:0)
bash不是C,for
,if
和[
都是命令,需要空格来将它们与其他单词分开。
使用
cd /Users/KanZ/Desktop/Project/Test/Model/Object
for file in *.obj
do
h=${file%.obj}.h
./obj2opengl.pl "$file"
mv "$h" ../Header
done
请参阅bash manual解释${file%.obj}
部分
如果您想要计算,请不要手动跟踪前导零,使用printf
:
max_width=${#end}
for ((i=$start; i<=$end; i++)); do
printf -v n "%0*d" $max_width $i
obj="A$n.obj"
h="A$n.h"
./obj2opengl.pl "$obj"
mv "$h" ../Header
done