带条件的Bash脚本

时间:2015-02-23 16:58:34

标签: bash shell for-loop terminal imagemagick

我想为终端创建一个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

我的语法有什么问题?

3 个答案:

答案 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