LINUX.ORG.RU
ФорумAdmin

цикл в цикле или как получить то что хочу

 , , , ,


1

2

Ситуация такая хочу из json дергать данные по скрипту и уже получать готовые данные

пробовал for in for, while in for, for in while, while in while. результата не дало

Очень простой пример

dns="yandex.ru mail.ru"
hosts="yandex mail"
hpath="$HOME/result"

echo "$(cat /dev/null > ${hpath})"

for n in $hosts; do
    echo $(echo $n >> ${hpath})
    for h in $dns; do 
        echo $(curl -I $h |grep 'Location\|Content-Length' >> ${hpath})
    done
done    

получаю либо такой вывод:

yandex
Location: https://yandex.ru/
Content-Length: 0
Location: https://mail.ru/
Content-Length: 185
mail
Location: https://yandex.ru/
Content-Length: 0
Location: https://mail.ru/
Content-Length: 185

либо после разных экспериментов, такой

yandex
Location: https://yandex.ru/
Content-Length: 0
mail
Location: https://yandex.ru/
Content-Length: 0
yandex
Location: https://mail.ru/
Content-Length: 185
mail
Location: https://mail.ru/
Content-Length: 185

хочу получить такой

yandex
Location: https://yandex.ru/
Content-Length: 0
mail
Location: https://mail.ru/
Content-Length: 185

Пример jsona

curl http://192.168.10.61:8085/data.json |jq '.Children[] | {CPU_temperature: .Children[1].Children[1].Children[] |select(.Text | contains("Core", "CPU Package")) |.Value}' |grep -v '{\|}' |tail -n1
curl http://192.168.10.71:8085/data.json |jq '.Children[] | {CPU_temperature: .Children[1].Children[1].Children[] |select(.Text | contains("Core", "CPU Package")) |.Value}' |grep -v '{\|}' |tail -n1

смысл в том чтобы вначале написать host или username а после уже вывод из json и так примерно по 6-7 курлов на каждый host

P.S. в списке будет больше значений, около 40 хостов



Последнее исправление: testvtigercrm123 (всего исправлений: 6)

hosts="yandex.ru mail.ru"
names="yandex mail"

это не похоже на json

echo "$(cat /dev/null > ${hpath})"

Зачищаешь файл с результатом? Оригинально.

for n in $names; do
    echo $(echo $n >> ${hpath})
    for h in $hosts; do 
        echo $(curl -I $h |grep Location >> ${hpath}
        echo $(curl -I $h |grep 'Content-Length' >> ${hpath})
    done
done

Ну а что ты хотел получить без правильного json файла? он просто переберет значения.

пробовал for in for, while in for, for in while, while in while. результата не дало читай про работу с двумерными массивами

NobleWolf
()
Ответ на: комментарий от NobleWolf

самый умный? это просто пример. Как сделать вывод таким как я хочу, учитывая что значений в списке будет много?

Json я дергаю через curl + jq, его в пример нету смысла приводить, т.к. вывод тоже дублируется, как в выводе выше

testvtigercrm123
() автор топика
Ответ на: комментарий от xvoid

так не получится потомучто там что-то типо этого

curl http://192.168.10.61:8085/data.json |jq '.Children[] | {CPU_temperature: .Children[1].Children[1].Children[] |select(.Text | contains("Core", "CPU Package")) |.Value}' |grep -v '{\|}' |tail -n1

и так несколько значений

testvtigercrm123
() автор топика
HOSTS="yandex:yandex.ru mail:mail.ru"
for HOST in $HOSTS
do
NAME=$(echo $HOST |cut -f 1 -d :)
URL=$(echo $HOST |cut -f 2 -d :)
echo $NAME > $RESULTFILE
curl $URL
shell-script ★★★★★
()
echo $(curl -I $h |grep Location >> ${hpath}
echo $(curl -I $h |grep 'Content-Length' >> ${hpath})

Слишком мало курлов, нужно по одному на греп каждой буквы.

anonymous
()
Ответ на: комментарий от testvtigercrm123

Да, можно.

Сделай цикл перебора индексов массива. В одном массиве храни названия, в другом - соответствующие адреса.

dsxl
()
Ответ на: комментарий от testvtigercrm123

А что упрощать? Вызов cut убрать? Ну можешь брать подстроки из переменной $HOST как-нибудь так

HOSTS="yandex:yandex.ru mail:mail.ru"
for HOST in $HOSTS
do
  echo ${HOST%:*} > $RESULTFILE
  curl ${HOST##*/}
done
shell-script ★★★★★
()
Ответ на: комментарий от shell-script

echo ${HOST%:*}

Это не совсем правильно, если вместо yandex.ru будет IPv6 адрес. Правильнее тут как раз %%.

${HOST##*/}

Чтобы не ошибаться (/ вместо :) лучше писать:

H=${HOST%%:*}
FULL=${HOST#"$H:"}

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 2)
Ответ на: комментарий от vodz

Чтобы не ошибаться

Да, опечатался. Спасибо, что поправил.

shell-script ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.