2012-08-16 85 views
0

我有這段代碼。但我總是得到一個錯誤line 34: [24: command not found在bash中比較一個變量和一個整數

只要do while循環執行24次,就應該執行if語句中的代碼。

#!/bin/bash 

input="./user.cvs" 

latexStart="\\documentclass[12pt]{article}\\usepackage{labels}\\usepackage{graphicx}\\usepackage{array}\\begin{document}\\graphicspath{{./QRcodes/}}\\newcolumntype{C}{>{\\centering\\arraybackslash} m{27mm} }" 

latexEnd="\\end{document}" 

latexBeginLabels="\\begin{labels}" 

latexEndLabels="\\end{labels}" 

counter=0 

touch newLabels.txt 

echo "$latexStart" >> newLabels.txt 

echo "$latexBeginLabels" >> newLabels.txt 

while IFS=';' read -r f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 
do 

path="./QRcodes/$f2$f3.png" 

vcard="BEGIN:VCARD%0AN;CHARSET=utf-8:$f3;$f2;;$f1;%0AADR;CHARSET=utf-8;INTL;PARCEL;WORK:;;$f10;$f11;;$f12;$f13%0AEMAIL;INTERNET:$f6%0AORG:$f4%0ATEL;WORK:$f8%0ATEL;FAX;WORK:$f9%0ATITLE:$f5%0AURL;WORK:$f7%0AEND:VCARD" 

encodedVCard=$(echo "$vcard" | sed -e 's/\+/\%2B/g') 

url="http://api.qrserver.com/v1/create-qr-code/?size=300x300&data=$encodedVCard" 

wget -O "$path" "$url" 

if ["${counter:-0}" -gt 21] ; 
    then 
     counter=0 
     echo "$latexEndLabels" >> newLabels.txt 
     echo "\\newpage" >> newLabels.txt 
     echo "$latexBeginLabels" >> newLabels.txt 
fi 

echo "\\begin{tabular}{ C C } \\includegraphics[height=30mm]{name.png} & Name Man \\\\ \\end{tabular}" >> newLabels.txt 

let counter=counter+1 

done < "$input" 

echo "$latexEndLabels" >> newLabels.txt 
echo "$latexEnd" >> newLabels.txt 

錯誤在第34行,if ["${counter:-0}" -gt 21] ;。我從Compare integer in bash, unary operator expected 得到了這個例子我做錯了什麼?

回答

3

你需要

if [ "${counter:-0}" -gt 21 ]; then ... 

即你的條件語句是從周圍的方括號用空格隔開。

我引用counter是安全的,但是如果你確定它永遠不會是空的,那麼你可以跳過它。然而,最好是safe than sorry,並且遵循你的原始模式。

+0

如果他不介意bash特有的功能,'if [[$ {counter:-0} -gt 21]];然後'使用雙括號,它不會對其內容進行分詞。 – chepner 2012-08-16 12:39:36

相關問題