如何制作运行其他脚本的脚本

时间:2013-01-04 05:56:53

标签: linux shell move

我想用

中的所有文件运行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

3 个答案:

答案 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,forif[都是命令,需要空格来将它们与其他单词分开。

使用

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