2017-01-19 3 views
0

Я новичок в программировании скриптов bash. Я написал небольшой скрипт в Python для вычисления значений списка от начального значения до последнего значения, увеличивающегося на 0,5. Сценарий Python:Как добавить значения в пустой массив в сценарии оболочки bash?

# A script for grid corner calculation. 
#The goal of the script is to figure out the longitude values which increase with 0.5 

# The first and the last longitude values according to CDO sinfo 
L1 = -179.85 
L2 = 179.979 
# The list of the longitude values 
n = []    

while (L1 < L2): 
    L1 = L1 + 0.5 
    n.append(L1) 

print "The longitude values are:", n 
print "The number of longitude values:", len(n) 

Я хотел был бы создать такой же сценарий bash shell. Я пробовал следующее:

!#/bin/bash 
L1=-180 
L2=180 
field=() 

while [ $L1 -lt $L2 ] 
do 
    scale=2 
    L1=$L1+0.5 | bc 
    field+=("$L1") 

done 

echo ${#field[@]} 

но это не работает. Может ли кто-нибудь сообщить мне, что я сделал не так? Буду признателен, если кто-то мне помог.

+0

не работает? не достаточно хорош. Может быть, потому, что сравнение с плавающей запятой не работает в bash? –

+0

Ваша строка «she-bang» неверна, должна быть '#!/Bin/bash' – Inian

+0

Массивная часть в порядке; это неправильное присвоение 'L1'. – chepner

ответ

2

Вы неправильно назначаете значение L1. Кроме того, -lt ожидает целые числа, поэтому сравнение будет неудачно после первой итерации.

while [ "$(echo "$L1 < $L2" | bc)" = 1 ]; do 
do 
    L1=$(echo "scale=2; $L1+0.5" | bc) 
    field+=("$L1") 
done 

Если у вас есть seq доступные, вы можете использовать это вместо того, чтобы, например,

field=($(seq -f %.2f -180 0.5 179.5)) 
+0

Большое спасибо за ваш быстрый ответ. Обе версии работают правильно. – Beata

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