2014-02-06 7 views
0

У меня есть скрипт, который найдет расстояния между двумя атомами в pdb.фильтрация файлов по номерам в bash error унарный оператор ожидается

bash не распознает десятичные знаки, поэтому я поставил скрипт printf на округлые десятичные знаки.

и echo $ b отлично работает и дает мне целочисленное значение.

, но линия if для моей системы фильтрации не работает.

я получаю и ошибка о том,

[: -ge: unary operator expected 

ниже является частью сценария, что я работаю.

a=$(awk '$2=='91'{x1=$6;y1=$7;z1=$8} $2=='180' {x2=$6;y2=$7;z2=$8} END{print sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2))}' ${names}.pdb.$i) 
b= printf %.0f $a 
echo $b 
if [ $b -ge 1 ] &&[ $b -le 9 ]; then 

всякая помощь будет принята с благодарностью. Заранее благодарю.

+0

Попробуйте вместо этого 'b = $ (printf"% .0f "$ a)' –

+0

Кажется, я ответил на ваш предыдущий вопрос, и все в порядке. Но сначала вы этого не приняли. – BMW

+0

@jkbkot Thx его работа. – user3267931

ответ

1
b= printf %.0f $a 

Эта строка устанавливает значение b ни к чему на время выполнения команды PRINTF, который посылает свой вывод на стандартный вывод

echo $b 

Это печатает пустую строку.

Вы не должны ставить пробелы вокруг = в назначении, а также для хранения вывода команды в переменную, можно использовать следующий синтаксис:

b=$(printf %.0f $a) 

Вы получаете ошибку, потому что $b пуст , и это то, что Баш видит:

if [ -ge 1 ] &&[ -le 9 ]; then 

-ge ожидает операнды на левой и правой, и он не видит один.

С bash вы должны (почти) всегда отдавать предпочтение [[ ... ]] над [ ... ] - форма двойной скобки не обманывается переменными, содержащими пустые строки.

Вы всегда должны указывать свой "$variables" - если вы точно не знаете, когда не указывать их.

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