我想为终端创建一个Bash脚本可执行文件。
根据目录中的文件数量,它应该为图像序列执行ImageMagick命令。
这是我的尝试,但在if
条件下我收到了这样的错误
date.sh: line 5: [: missing `]'
date.sh: line 7: [: missing `]'
剧本:
#! /bin/bash
f=$(find . -name "0001_*_L.jpg" | wc -l)
for i in {1..$f}; do
if [ "$f" -lt 10]; then
fz=000
elif [ "$f" -lt 100]; then
fz=00
else fz=0
fi
echo $fz $i
convert *_$fz$i_L.png +append L/$i_L.png
convert *_$fz$i_R.png +append R/$i_R.png
done
我的语法有什么问题?
答案 0 :(得分:0)
您的代码在'if'条件中包含此行:
if [ "$f" -lt 10]; then
您应将其更改为:
# +--- (extra space here!)
# |
# v
if [ "$f" -lt 10 ]; then
使用'elif':
在您的其他行上也会发生同样的情况elif [ "$f" -lt 100 ]; then
这是if [ ... ]; then
语法的要求:[
和]
需要有这些额外的空格。
答案 1 :(得分:0)
我发现这是一种更好的零填充方式......
#!/bin/bash
for i in {1..101}; do
# Calculate a zero-padded $i
zpi=$(printf "%04d" $i)
echo $zpi
done
<强>输出强>
0001
0002
...
0008
0009
0010
0011
0012
...
0098
0099
0100
0101
...
答案 2 :(得分:0)
感谢回复,这是一个更聪明的方式,然后我想与%04d。有时它可能会容易得多
这是我运行的代码
#! /bin/bash
f=$(find . -name "0001_*_L.jpg" | wc -l)
echo $f
i=1
while [ "$i" -le "$f" ]; do
fz=$(printf "%04d" $i)
echo $fz
convert "*_${fz}_L.jpg" +append "L/${fz}_scrL.jpg"
convert "*_${fz}_R.jpg" +append "R/${fz}_scrR.jpg"
i=$(($i + 1))
done