![]() |
![]() |
#1 |
Banned
Регистрация: 05.01.2015
Сообщений: 18
Вес репутации: 0 ![]() |
![]()
А что, в минироутерах (mr3020, gl-inet, и тд) на opwenwrt в ихних shell-скриптах (или как там это правильно называть? sh-файлы) массивы (arrays) отсутствуют как класс?
Пробовал куча разных вариантов синтаксиса из инета - ни один не пошел, зато нашел какую-то неуверенную инфу, что вроде BusyBox (на нем шелл в этих роутерах реализован) не поддерживает arrays. Кто то может что-то сказать по этому поводу? p.s. Речь об обычных индексных массивах, не ассоциативных, естественно. |
![]() |
![]() |
![]() |
#2 |
Senior Member
|
![]()
Насколько я знаю, поддержки массивов нет, но в некоторых случаях можно обойтись без них:
Код:
# Расчёт CRC16. crc () { # Преобразуем выражение в строку. str="$1" # Расчитываем количество циклов. cnt=$((${#1}-2)) # Начальное значение. crc=0xFFFF for i in `seq 0 2 $cnt`; do crc=$(( crc ^ 0x${str:$i:2} )) for j in `seq 0 7`; do c=$(( crc >> 1 )) if [ $(( crc & 1 )) = 1 ]; then let 'c ^= 0xA001' fi crc=$c done done # Меняем местами байты. c=$(( crc & 0xFF )) c=$(( c << 8 )) crc=$(( crc >> 8 )) crc=$(( crc + c )) # Переводим в hex вид. printf "%04X" $crc }
__________________
Россия навсегда! |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Регистрация: 21.12.2014
Сообщений: 164
Вес репутации: 0 ![]() |
![]() Цитата:
мне надо произвольный доступ по индексу к строковому массиву. Мне даже где-то попадался рабочий пример "типа строкового массива", но с последовательным доступом по инкрементному индексу - может быть этот пример еще как то удастся приспособить... Ладно, спасибо, будем думать... п.с. странно, циклы есть, а массивов нету :-) Последний раз редактировалось SergeS; 13.01.2015 в 02:30. |
|
![]() |
![]() |
![]() |
#4 |
Junior Member
Регистрация: 29.07.2013
Сообщений: 2
Вес репутации: 0 ![]() |
![]()
Мне помогла первая же ссылка в гугле:
Код:
#!/bin/ash ARRAY=" \ http://openwrt.org \ http://wiki.openwrt.org \ " i=1 for j in $ARRAY do echo $i: $j i=`expr $i + 1` done |
![]() |
![]() |
![]() |
#5 |
Senior Member
|
![]()
Это не массив строк, а строка с пробелами между словами. В моём примере есть такой же цикл с перебором элементов последовательности `seq 0 7`, где for перебирает элементы последовательности, разделённые пробелами (возможно и другими разделителями).
Идеология unix построена вокруг небольших специализированных утилит, которые обрабатывают данные последовательно, элемент за элементом. Самый простой интерпретатор shell вот это и делает. Он может работать с последовательностями , а ваша задача представить данные так, чтобы они представляли из себя последовательный одномерный набор объектов. Набор строк - это уже более сложный объект, чем просто строка. Я использую json, чтобы работать с массивами.
__________________
Россия навсегда! |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Регистрация: 21.12.2014
Сообщений: 164
Вес репутации: 0 ![]() |
![]() Цитата:
|
|
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|