2015-02-23 83 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