Я пытался записать исполняемый сценарий, который создает файлы, содержащие несколько переменных.
Здесь, x
варьируется от 1 до 25, z от 5 до 7 на шагах 0,1, пока y
и w
константы. Следовательно, для каждого значения x
, должен быть 21 файл. Я попробовал ниже, однако я не могу получить голову вокруг, как такой вложенный для цикла должен работать.
mkdir dir
for ((i=1;i<=25;i++)); do
printf 'x=%s\ny=4\n' "$i"
for ((j=5;j<=7;j=j+0.1));do
printf 'z=%s\nw=4\n' "$j" > dir/diles_$i_$j.txt
done
Кроме того, как я могу сделать этот исполняемый файл? Я работаю над Ubuntu.
Вот Ваше решение:
#! /bin/bash
mkdir dir
for ((i=1;i<=25;i++)); do
printf 'x=%s\ny=4\n' "$i"
for ((j=50;j<=70;j++));do
t=$(bc <<< "scale=1; $j/10")
printf 'z=%s.1f\nw=4\n' "$t" > dir/diles_$i\_$t.txt
done
done
Объяснение:
bc
команда, которые преобразовывают целочисленную операцию (подразделение, например) для получения плавания; scale
шоу оператора, сколько десятичного числа мы хотим иметь (здесь, 1 suffisant, чтобы не иметь, многие 0
, как bc -l
делают) \\
в имени файла, потому что это не заботилось о i
для именования файлов <час> ifnot кроме того, я указал, что 1-е printf
команда просто печатает результат как этот в терминале, вероятно, Вы добавили бы их в каждом файле (вместо дисплея терминала), таким образом, необходимо использовать код ниже в этом случае:
#! /bin/bash
mkdir dir
for ((i=1;i<=25;i++)); do
for ((j=50;j<=70;j++));do
t=$(bc <<< "scale=1; $j/10")
printf 'x=%s\ny=4\n' "$i" > dir/diles_$i\_$t.txt
printf 'z=%s.1f\nw=4\n' "$t" >> dir/diles_$i\_$t.txt
done
done
NB: >>
оператор или 2-е printf
команда важна здесь (1-й printf
, не заботился, зависит, только если Вы хотите заботиться о предыдущих данных - >>
- или не - >
), потому что, если бы Вы используете просто >
операнд, Вы стерли бы все предыдущие данные (таким образом, вывод 1-го printf
будет удален)
Источники: