2014-11-08 2 views
0

помогите мне пожалуйста. я не могу понять, если внутри WHILE:не может понять, если внутри цикла

while IFS=';' read one two three; 
do 

if (($three >= 1)) #this is a line that i can't understand 

then X=$(for i in $two 
    do BIN=$(echo "obase=10; ibase=16; $i" | bc) 
    echo $BIN 
    done) 
fi 
done < /testcsv.csv 

и выходе:

./test.sh: line 34: ((: <= 1 : syntax error: operand expected (error token is "<= 1 ") 
+1

И точно, какая часть написанного вами - это li ne 34? –

+0

Вы уверены, что знаете достаточно информации? при запросе вы должны ввести три слагаемых, разделенных точкой с запятой, последний должен быть числом (и, скорее всего, это то, что вы пропустили, чтобы получить полученную вами ошибку), второй должен быть списком шестнадцатеричных чисел, разделенных пробелами. Но, честно говоря, это ужасный фрагмент кода, и он подвержен инъекции кода. Не используйте его. –

ответ

0

Синтаксис для IF в Баш бы что-то из следующего:

if [ conditional expression ] 

В вашей case:

if [ $three >= 1 ] 
+1

Его синтаксис прекрасен. –

+0

Это? Я просто сделал короткий тест (OS X Bash 3.2.53) с его синтаксисом и получил это _ (токен ошибки ...) _ вещь. Решено в скобках в моем примере. – mattias

+0

@mattias В тесте '> =' выполняет лексический анализ сортировки. В отличие от этого, в современном bash так или иначе, '(($ three> = 1))' выполняет численное сравнение. Если '((...))' недоступно в OSX, тогда OP, вероятно, хочет '[" $ three "-ge 1]'. – John1024

Смежные вопросы