0

私はこのコードを持っています。しかし、私は常にエラーが発生しますline 34: [24: command not found

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から取得しまし た。何が間違っていますか?

4

1 に答える 1

3

あなたが必要

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

つまり、条件文は周囲の角括弧からスペースで区切られています。

私はcounter安全であることを引用していますが、それが決して空にならないことが確実な場合は、それをスキップできます. ただし、申し訳ありませんが、元のパターンに従うよりも安全である方がよいでしょう。

于 2012-08-16T09:10:38.930 に答える