dialog
no actualiza $OPAC en su lugar :tiene que extraer la información del usuario de los datos de $VALUES. Agregue este código antes deecho Entering next step...
{
read -r Name
read -r OPAC
read -r Intranet
read -r mysqlroot
read -r password
} <<<"$VALUES"
echo === debug info
echo "Name=>$Name<"
echo "OPAC=>$OPAC<"
echo "Intranet=>$Intranet<"
echo "mysqlroot=>$mysqlroot<"
echo "password=>$password<"
echo ===
Cuando esté satisfecho con él, comente los comandos de depuración echo
.
Otra forma de abordar esto es usar el comando readarray
para capturar la salida del diálogo. Eso coloca los datos, no en una sola cadena, sino en una matriz indexada basada en 0 -, un valor por línea:
readarray -t data < <( dialog... 2>&1 1>&3 )
echo "debug: user data"
declare -p data
#...
sudo sed -i -e "5 a\Listen ${data[1]}" -e "5 a\Listen ${data[2]}" /etc/apache2/ports.conf
Я думаю, что решение этой проблемы с помощью bash было бы кошмаром. Это, безусловно, выполнимо, особенно если вы открыты для использования awk, но тогда это тоже не совсем bash, так что вот немного python
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('--template', required=True, help="Template file")
parser.add_argument('--start', default=0, help="Number to begin counting from")
parser.add_argument('--stop', default=100, help="Number to end at")
parser.add_argument('--step', default=10, help="Number to increment by")
args = parser.parse_args()
for i in range(args.start, args.stop, args.step):
with open('{}.txt'.format(i)) as pfile:
pfile.write(args.template.format(count=i))
Вы можете запустить это, передав «--start» в качестве числа, с которого нужно начать, «--stop» в качестве числа, на котором следует остановиться, и «--step» в качестве числа, на которое следует увеличивать. Вы можете заменить свой абзац, заменив текст в переменной paragraph
в верхней части скрипта или поместив текст в отдельный файл и передав имя файла, используя «шаблон --». Обязательно используйте {count}
везде, где вам нужен номер в шаблоне.
Вот простой скрипт Python 3, который добавляет 10 к каждому числу.
#!/usr/bin/env python3
import fileinput
import re
rx = re.compile(r'(\d+)')
for line in fileinput.input():
parts = rx.split(line.rstrip('\n'))
if len(parts) > 1:
for i in range(1, len(parts), 2):
parts[i] = str(int(parts[i]) + 10)
line = "".join(parts)
print(line)
Предполагается, что каждая строка начинается с числа, отличного от -. Нетрудно измениться, чтобы быть немного более гибким, но на данный момент это, похоже, решило задачу.
Чтобы вызвать это из сценария Bash, просто сохраните его в файле и chmod a+x filename.py
. Итак, если вы сохранили его в ./splitnum.py
, это команда для его запуска, как только вы убедитесь, что у него есть разрешение на выполнение.
Вот лайнер Perl one -:
perl -lne '@s = split(/(\d+)/); for($i=1;$i<=$#s;$i+=2) { $s[$i] += 10 }; print(join("", @s))'
Если число всегда является первым номером строки, а ваш файл состоит только из одной строки, вы можете сделать это с помощью простого -вкладыша:
i=100; for k in $(seq 100 10 1000); do sed "s/$i/$k/g" file > file.$k; done
Предполагается исходный входной файл с именем file
со следующим содержимым:
$ cat file
aaaaaaaaaaaaaa100bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccc100ddddddddddddddddd
И произведет file.100
, file.110
... file.1000
.
Конечно, это займет несколько секунд, так как для каждого файла нужно запускать отдельную команду. Для более эффективного подхода вместо этого вы можете использовать команду Perl:
perl -ne 'for ($i=110;$i<=1000;$i+=10){s/(\d+)/$i/eg; open($fh,">","file.$i"); print $fh "$_" }' file