dpkg
printun
(unknown ), так как его база данных не обновлена. Вы можете использовать пакет sync-available
from dctrl-tools
для синхронизации информации dpkg
с apt
.
sudo apt install dctrl-tools
sudo sync-available
sync-available - sync dpkg's available database with apt's database
DESCRIPTION
This program updates the dpkg(8) available database with the data in the apt(8)
package database. This is required for grep-available(1) and other similar
programs to give up-to-date results.
Не уверен, что это будет работать в вашей версии bash, так как кажется, что команда seq недоступна,но вы можете попробовать с диапазоном for, например
#!/bin/bash
for n in {220210..220221}
do
echo $n >> numberfile.txt
done
Это можно сделать с помощью утилиты настольного калькулятора dc
. Загрузите два номера диапазона в любом порядке. Только не забудьте изменить знак отрицательного числа как подчеркивание вместо тире. Например, -32 будет выглядеть как _32.
dc <<EOF
220201 220210
[larsa]sb
[lap1+sadla<+]s+
sadla>bla
sal+xp
EOF
Результаты:
220201
220202
220203
220204
220205
220206
220207
220208
220209
220210
Еще один метод заключается в использовании утилиты bc
двоичного калькулятора. Как видите, загрузите числа в любом порядке, bc изменит их, если потребуется, и начнет цикл от меньшего к большему с шагом 1.
echo "a=7;b=0;if(a>b){t=a;a=b;b=t;};for(i=a; i<=b; i++) {i;}" | bc
Чтобы записать все целые числа в диапазоне [220210,220221] в файл, используя оболочку bash
(или любую оболочку, имеющую раскрытие фигурных скобок):
printf '%s\n' {220210..220221} >file
Здесь происходит то, что оболочка расширит раскрытие фигурной скобки {220210..220221}
до списка всех целых чисел в диапазоне. Затем они будут использоваться в качестве аргументов команды printf
.
Команда printf
выводит свои аргументы в соответствии со своей строкой формата (1-й аргумент ). Строка формата %s\n
сообщает printf
о выводе каждого аргумента в виде строки с завершающим символом новой строки. Поскольку вы выводите целые числа, вы могли бы также использовать %d\n
, но это не имело бы никакого значения.
Перенаправление >file
указывает оболочке поместить весь вывод команды printf
в файл с именем file
. Файл будет создан или, если он уже существует, сначала будет усечен (и очищен ).
Если вы используете оболочку, которая не понимает раскрытие фигурных скобок, то приведенное выше просто напечатает {220210..220221}
в строке.
В такой оболочке вы можете захотеть сделать явный цикл:
n=220210
while [ "$n" -le 220221 ]; do
printf '%s\n' "$n"
n=$(( n + 1 ))
done
Это создает переменную n
, которую мы печатаем и увеличиваем на каждой итерации. Начальное значение переменной устанавливается на 220210 перед циклом, и цикл завершается всякий раз, когда $n
достигает 220222 (, это значение не будет напечатано ).
Правильный способ сделать это - использовать seq
или расширение скобок, как показали другие ответы. Если по какой-то причине вы не можете и нуждаетесь в простой оболочке POSIX, вы можете попробовать:
#!/bin/sh
i=$1;
while [ $i -le $2 ]; do
echo "$i"
i=$((i+1))
done
Несколько более современным (, но менее переносимым, не -POSIX )синтаксисом будет:
#!/bin/bash
for((i=$1;i<=$2;i++)); do
echo "$i"
done
awk есть почти в каждом дистрибутиве за последние 30 лет, и это базовый K&R awk.
echo 220210 220221 | awk '{ for (j = $1; j <= $2; j++) print j }'