2012-08-16 52 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

相关问题