Créer et afficher un un fichier JSON en bash

Fermé
manu253 - Modifié le 10 mai 2022 à 13:15
mamiemando Messages postés 33334 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 novembre 2024 - 6 mai 2022 à 16:12
Bonjour,

Je suis en train de faire un exercice dans lequel je dois écrire un script bash pour vérifier si mon client utilise bien le service NTP de mon serveur debian.
Le problème, c'est que je dois afficher le résultat au format JSON, or créer un ficher json quelque chose que j'ai jamais fait.

Voici mon script :

#! /bin/bash

declare -A critere
critere[NtpRemote,valeur]=192.168.10.254
critere[NtpRemote,ponderation]=20

remotecheck=false
ponderationtotal=0
#echo ${critere[NtpRemote,valeur]}
#echo ${!critere[@]}
for c in ${!critere[@]}
do


 if [ $c = "NtpRemote,valeur" ]
 then 
  remote=$(ntpq -pn | grep 192.168.10.254 | cut -c 2-15)
  if [ ${critere[$c]} = $remote ]
  then
   echo "Remote  = GOOD"
   remotecheck=true
   ponderationtotal=$(expr ${ponderationtotal} + ${critere[NtpRemote,ponderation]})
  fi
 fi
 done
 
 echo "PONDERATION = ${ponderationtotal}" | jq -R -S 'split("\n") | {Question: 2{REMOTE: ${remotecheck}}}' q2.json


Merci de m'aider

1 réponse

mamiemando Messages postés 33334 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 novembre 2024 7 801
Modifié le 6 mai 2022 à 16:15
Bonjour,

En soi, générer un fichier json n'est pas plus compliqué qu'un fichier texte, il suffit d'obéir aux contraintes imposées par ce format :
  • Les dictionnaires (ensemble de paires clés valeurs) sont déclarées sous la forme
    {cle1 : valeur1, cle2 : valeur 2 ...}
    ;
  • Les listes (séquence de valeurs) sont déclarées sous la forme
    [valeur1, valeur2, ...]
    ;
  • les types supportés sont (voir ce lien) :
    • string
    • number (= flottant)
    • integer
    • object (= dictionnaires)
    • array (= listes)
    • boolean
    • null
  • Tu es libre d'indenter le fichier JSON à ton idée
  • Il n'y a pas de commentaires en JSON ;.


Il faut donc réfléchir à comment tu veux organiser les résultats de ton script. As-tu besoin d'une liste, d'un dictionnaire, quelles informations tu veux véhiculer, etc, il n'y a que toi pour nous le dire.

Si on se réfère à cette page, j'imagine que tu veux renvoyer les résultats de cette commande (un texte organisé sous forme de tableau) au format json. Il faut donc que ton script bash soit capable d'itérer sur chaque ligne et chaque case de ce tableau et génère la liste en conséquence.

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
dione.cbane.org 204.123.2.5 2 u 509 1024 377 51.661 -3.343 0.279
ns1.your-site.c 132.236.56.252 3 u 899 1024 377 48.395 2.047 1.006
ntp.yoinks.net 129.7.1.66 2 u 930 1024 377 0.693 1.035 0.241
LOCAL(0) .LOCL. 10 l 45 64 377 0.000 0.000 0.001


Est-ce conforme aux résultats que tu obtiens ?

Ça s'écrit facilement en python mais en bash c'est beaucoup plus pénible, donc avant d'aller plus avant, est-ce que le langage de script est imposé ?

Bonne chance
0