Вы могли бы использовать расширение скобки для генерации списка всех 4-байтовых шестнадцатеричных кодовых последовательностей (00000000
, 00000001
, 00000002
,…, FFFFFFFF
).
{{0..9},{A..F}}
создает список 0 1 2 … F
.
{{0..9},{A..F}}{{0..9},{A..F}}
создает список 00 0 02 … FF
.
И т. Д.
Для 4 байтов вы должны повторять {{0..9},{A..F}}
8 раз, как каждый байтимеет две шестнадцатеричные цифры.
for i in {{0..9},{A..F}}{{0..9},{A..F}}{{0..9},{A..F}}{{0..9},{A..F}}{{0..9},{A..F}}{{0..9},{A..F}}{{0..9},{A..F}}{{0..9},{A..F}}; do
cansend slcan0 "7e0#02090${i}0000000000"
done
Хотя этот подход может быть жизнеспособным для двух или трех цифр, я настоятельно рекомендую не использовать его в этом случае.Вышеупомянутый скрипт не читается и очень медленный.
Следующая лучшая вещь в bash будет…
bytes=4
((max=2**(bytes*8)-1))
for ((i=0; i<max; i++)); do
printf -v hex %08x "$i"
cansend slcan0 "7e0#02090${hex}0000000000"
done
… но имейте в виду, что это будет величины медленнее, чем отправка последовательностей из (например) программы на Python, которой не нужно запускать новый процесс каждый раз, когда вы хотите что-то отправить в slccan0.