Циклы Shell с помощью нецелых чисел?

Я записал .sh файл, чтобы скомпилировать и запустить несколько программ для присвоения домашней работы. Я имею "для" цикла в сценарии, но он не будет работать, если я не буду использовать только целые числа:

#!/bin/bash
for (( i=10; i<=100000; i+=100))
do
    ./hw3_2_2 $i
done

Переменный $i является входом для программы hw3_2_2, и у меня есть значения нецелого числа, которые я хотел бы использовать. Как я мог циклично выполниться посредством выполнения кода со списком десятичных чисел?

14
задан 10 revs, 7 users 63% 19 March 2010 в 01:03
поделиться

4 ответа

bash не использует десятичные числа. Либо используйте что-то вроде bc , что может, либо перейдите на более полный язык программирования. Однако остерегайтесь проблем с точностью .

0
ответ дан 1 December 2019 в 05:55
поделиться

вы можете использовать awk для генерации десятичных дробей, например, шаги 0,1

num=$(awk 'BEGIN{for(i=1;i<=10;i+=0.1)print i}')
for n in $num
do
  ./hw3_2_2 $n
done

, или вы можете сделать это полностью в awk

awk 'BEGIN{cmd="hw3_2_2";for(i=1;i<=10;i+=0.1){c=cmd" "i;system(cmd) } }'
9
ответ дан 1 December 2019 в 05:55
поделиться

Самый простой способ - просто перечислить их:

for a in 1.2 3.4 3.11 402.12 4.2 2342.40
do
  ./hw3_2_2 $a
done

Если список огромен, так что вы не можете иметь его в виде буквального списка, подумайте о том, чтобы записать его в файл, а затем использовать что-то вроде

for a in $(< my-numbers.txt)
do
  ./hw3_2_2 $a
done

Часть $(< my-numbers.txt) - это эффективный способ (в Bash) подставить содержимое файла имен в это место скрипта. Спасибо Dennis Williamson за указание на то, что для этого нет необходимости использовать внешнюю команду cat.

9
ответ дан 1 December 2019 в 05:55
поделиться

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

read -r -d '' data <<EOF
1.1
2.12
3.14159
4
5.05
EOF

for i in "$data"
do
    ./hw3_2_2 "$i"
done

Аналогично:

array=(
1.1
2.12
3.14159
4
5.05
)

for i in "${array[@]}"
do
    ./hw3_2_2 "$i"
done
2
ответ дан 1 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: