1

我想运行包含所有文件的 obj2opengl.pl

/用户/KanZ/桌面/项目/测试/模型/对象

这是名称 A001.obj A002.obj ... 运行脚本后,我会得到 A001.h A002.h ... 我想将这些文件移动到

/Users/KanZ/Desktop/Project/Test/Model/Header

如何在下面修改此代码 *问题出在 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
4

3 回答 3

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 手册以解释该${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
于 2013-01-04T12:01:32.930 回答
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 \;
于 2013-01-04T06:37:52.917 回答
0
if[$c > 9] then
   b++

我认为这是语法错误。[是shell中的命令,它需要一个或多个args,最后一个arg必须是[,所以你必须使用空格分隔命令和args,并且在和之间也需要if空格[

还有一个错误,shell不支持c风格++,可以用b=$[b+1]

这是正确的代码:

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=$[c+1]
if [ $c > 9 ] then
   b=$[b+1]
   c=0
fi
if [ $b > 9 ] then
   a=$[a+1]
   b=0
   c=0
fi
done
于 2013-01-04T10:20:58.043 回答