2015-02-23 95 views
1

我想为终端创建一个Bash脚本可执行文件。带条件的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 

什么是错我的语法?

+4

您需要关闭您的方括号前添加一个空格']' – arco444 2015-02-23 17:04:32

+0

与你的语法后,']'是固定的,你的ImageMagick命令可能仍然不起作用..但是,然后请问另一个标签为'imagemagick'的问题:-) – 2015-02-23 23:04:20

+0

尝试运行这个...'printf“%04d%04d%04d”7 77 777' – 2015-02-23 23:18:02

回答

0

您的代码具有此行为'如果'条件:

if [ "$f" -lt 10]; then 

您应将其更改为:

#    +--- (extra space here!) 
#    | 
#    v 
if [ "$f" -lt 10 ]; then 

同样应该对使用“ELIF您的其他线路发生'

elif [ "$f" -lt 100 ]; then 

这是if [ ... ]; then语法的要求:[]需要有这些额外的空间。

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 
... 
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