UNIX shell脚本:UDV
我写一个简单的UNIX shell脚本:UNIX shell脚本:UDV
#!/bin/bash
# abort the script if a command fails
set -e
# abort the script if an unitialized shell variable is used
set -u
i = 0;
while [$i -l 1]
do
src/meshpro input/martini.off video/noise/image$i.off -noise $i
src/meshview video/noise/image$i.off -output_image video/noise/image$i.jpg -exit_immediately
i='expr $i + 0.1'
done
当我尝试运行该脚本,我得到以下错误:line 14: i: command not found
。我使用了一个教程来应用于我的代码。任何建议我做错了什么?
不要把空格周围等号,你不需要分号:
i=0
此外,你必须在脚本不少其他错误。
空间伤害。把
i=0;
不
i = 0;
用空格我被解释为命令,而不是assignement。
代码中还有其他间距问题 - 分号不是必需的。 – 2010-03-07 23:45:15
没有必要是不同的错误,并在一次的错误:) – 2010-03-08 00:15:44
如果使用正常分配,不能有空格,所以你需要:
i=0
(注意,分号是不必要的)。如果您确实需要格式良好的表达式,则可以使用:
((i = 0))
声明。我也会用它来代替expr
,因为expr
是一个外部命令,它具有创建进程的所有成本(对于仅创建少量外部进程的快速和肮脏的脚本,这通常不重要,但是,如果发现它发生很多事情,你可以获得非常不错的表现改善)。
不幸的是,它并不像浮点,但你可以很容易地模仿它在你的情况,因为你的号码只是从0.0
通过0.9
(即,只有小数部分的变化)范围:
((i = i + 1))
和运行它从0到9,修改其他行以适应新的范围。
我检查的唯一的另一件事是:
while [$i -l 1]
我觉得[
被视为一个命令,所以你可能需要空间(和你肯定需要一个真正的比较操作):
while [ $i -lt 1 ]
而且[
通常也是一个外部程序,我更喜欢bash
内置[[
。
搭售所有这些元素结合在一起:
#!/bin/bash
set -e
set -u
((i = 0))
while [[ $i -lt 10 ]] ; do
src/meshpro input/martini.off video/noise/image0.$i.off -noise 0.$i
src/meshview video/noise/image$i.off -output_image \
video/noise/image0.$i.jpg -exit_immediately
((i = i + 1))
done
你会发现与以前的零文件输出的差异会一直image0.off
与其他image0.X.off
,而现在它的image0.0.off
。我认为这也是有益的,因为它可以让所有文件的格式完全相同。
如果你不同意,那将是一件简单的事情添加:
mv video/noise/image0.0.jpg video/noise/image0.jpg
到脚本的结尾。
回复:[vs [[和[作为一个命令:风格明智,我真的更喜欢使用'测试''''。在测试$ i -lt 1时,没有人会写错'但''while'$ i -lt 1''似乎是经常犯的错误。附注:[和测试已经很长一段时间内建立了bash。 – 2010-03-08 17:05:30
该expr
是错误的。 AFAIK它不处理十进制。而且i = 0
也是错误的。 =
标志周围没有空间。
#!/bin/bash
set -e
set -u
i=0;
while true
do
src/meshpro input/martini.off video/noise/image$i.off -noise $i
src/meshview video/noise/image$i.off -output_image video/noise/image$i.jpg -exit_immediately
i=$(echo "scale=2;$i + 0.1"|bc)
case $i in 1.*) break ; esac
done
我是否允许增加一个非整数值的东西,就像我正在处理变量i一样? – Myx 2010-03-07 23:03:17
是的,但不适用于'expr'。试试'bc'。 – 2010-03-07 23:05:07
谢谢=)我试过bc(i ='bc $ i + 0.01'),但是我得到了第10行:[:while while循环的第二次运行时出现太多参数 错误。 – Myx 2010-03-07 23:12:16