LINUX.ORG.RU

Сообщения vesta

 

jq update value json

jq -r '.[] | [.name, .ip, .status, .date, .report] | @tsv' $task_file | \
	while IFS=$'\t' read -r name ip status date; do
        printf "$name\t$ip\t$status\t$date\t$report_patch\n"
	done | jq --raw-input --slurp 'split("\n") | map(split("\t")) | .[0:-1] | map( { "name": .[0], "ip": .[1], "status": .[2], "date": .[3], "report": .[4] } )' > task.json
mv task.json $task_file

Необходимо после обработки json файла, изменять его новыми значениями. Думал решить данную проблему, через временный файл, но $task_file автоматически обновляется каждые 4 сек. Выходит что пока цикл завершится, в $task_file добавятся новые значение для обработки, но цикл их не увидит!

 ,

vesta
()

sshpass передать переменную

sshpass -p $pass ssh -o StrictHostKeyChecking=no $user@$ip 'bash -s' <<'ENDSSH'
        echo $pass | sudo -S true
	echo $pass | sudo apt update
ENDSSH

Я знаю что так не делают, что плохой методом аутентификации! но все же как передать скрипту переменную с паролем ? echo $pass | sudo -S true - не понимает

 ,

vesta
()

bash date

Подскажите как отнять дату? Необходимо отнять дату из переменной с текущей, и если разница дней равняется 3, то выполняем условие

Решил преобразовать дату в одно число

date1="25.01.2020"
curent=$(date +"%d.%m.%Y" | tr -d ".")
previous=$(echo $date1 | tr -d ".")
result=$(($curent-$previous))
if [[ "$result" -eq "3000000" ]]
then
   echo "время истекло"
else
  echo "еще не время"
fi

Данное решение работает, пока не наступает конец месяца, или начала нового

 ,

vesta
()

Bash json массив

Добрый вечер уважаемые форумчане! просьба помочь решить задачу

Есть локальный довольно большой json файл

{"ip":"10.10.10.15","processort":"Intel(R) Celeron(R) CPU 1000M @ 1.80GHz","location":"Бокс 1"},
{"ip":"10.10.10.17","processort":"Intel(R) Celeron(R) CPU 1000M @ 1.80GHz","location":"Бокс 2"}
Распарсиваю файл через jq
arr=( $(jq -r '.[2] | .data[] | .ip, .processort, .location' file.json) )
for i in ${arr[@]}
do
ip=$(printf '%s\n' "${i[0]}")
if ping -c1 -w3 $ip >/dev/null 2>&1; 
then
       echo "ONLINE" 
else
       echo "OFFLINE"
fi
done
Задача пройтись по каждому объекту ip, проверить его на доступность, и записать в новый json файл но с добавлением новых объектов Должно выйти так
{"ip":"10.10.10.15","processort":"Intel(R) Celeron(R) CPU 1000M @ 1.80GHz","location":"Бокс 1","status":"online", "date":"18.01.2020"},
{"ip":"10.10.10.17","processort":"Intel(R) Celeron(R) CPU 1000M @ 1.80GHz","location":"Бокс 2", "status":"offline", "date":"18.01.2020"}

 ,

vesta
()

Bash поиск совпадений двух переменных

var1=«01000ccccccc 01000ccccccd 0180c2000000 0180c2000001 0180c2000002 0180c2000003 0180c2000004 0180c2000005 0180c2000006 0180c2000007 0180c2000008 0180c2000009 0180c200000a 0180c200000b 0180c200000c 0180c200000d 0180c200000e 0180c200000f 0180c2000010 777 6cab059e9df4 776 6cab059e9df4 776 776 774 4447cc65aa58 774 6cab059e9df4 773 00f66363c828 773 6cab059e9df4 775 6cab059e9df4 29»
var2=«Start 000c41 6cab05 000e08 000f66 001217 001310 0014bf 0016b6 001839 0018f8 001a70 001c10 001d7e 001ee5 002129 00226b 002369 00259c 20aa4b 48f8b3 586d8f 687f74 98fc11 c0c1c0 c8b373 c8d719 END»

Необходимо сравнить две переменных $var1 $var2, и если найдено совпадение то выводим его. Например в var1 есть строка 6cab059e9df4 в var2 строка 6cab05 результат выводим найденную строку 6cab059e9df4
пробовал так

grep $var1 <<< $var2
echo $var1 | grep $var2
Валит ошибки «Нет такого файла или каталога»
Просьба помочь

 ,

vesta
()

Bash заполнение массива

Необходимо пройтись по всем элементам массива ${MAIN[@]}, и занести результат переменной serial в новый массив INFO_ARRAY.

INFO_ARRAY=()
for i in ${MAIN[@]}
do
  serial=$(echo $i | sed -r "s/\s.*//g")
  INFO_ARRAY[n]+=$serial
done
clear
echo ${INFO_ARRAY[@]}
Просьба подсказать как правильно заполнить массив INFO_ARRAY в цикле

 ,

vesta
()

sed вставить переменную в файл

Необходимо занести результат переменной в файл, после определенного текста

var1=$(who)
sed -i '/<!-- text -->/a\' "$var1" file.txt

Вот так не работает я так понял необходимо как то обернуть переменную в кавычки

если присвоить значение переменной , то работает var1=«bla bla bal»

 ,

vesta
()

Подскажите по sed

Есть ip такого плана

127.110.0.181
127.117.0.61
127.110.0.241
Как сделать что бы 0 удалялся, а в конце 1 добавлялcя

Результат

127.110.181.1
127.117.61.1
127.110.241.1

 

vesta
()

Bash вложенный массив

Просьба помочь! имеется вложенный массив

id_equipment_num='5'
ip="728d25af6e8d:192.168.0.2,
  fb44c11c1f29:192.168.0.3,
  9e276580d749:192.168.0.4"

declare -A wow=(
  [$id_equipment_num]=$ip
)
IFS=,
for id_equipment in ${!wow[@]}
do
  for ip_equipment in ${wow[$id_equipment]}
  do
    echo $id_equipment $ip_equipment
  done
done

Результат:

  • 5 728d25af6e8d:192.168.0.2
  • 5 fb44c11c1f29:192.168.0.3
  • 5 9e276580d749:192.168.0.4

Необходимо разделить mac, и ip на переменные

echo $id_equipment $mac_equipment $ip_equipment 

 

vesta
()

RSS подписка на новые темы