2016-10-20 2 views
0

Ich habe ein Skript, liest einige Eingabe-Informationen, Zeile für Zeile, dann geht in Schleife, und dann, innerhalb der Schleife, erstellt JSON-Dateien mit einigen erweiterten Variablen basierend auf Informationen, die es nimmt von Eingangsinformationen ab, die von Zeit zu Zeit unterschiedlich sind.Bash Hilfe mit EOF innerhalb einer While-Schleife

Das Problem, ist, dass, wenn ich Katze & EOF benutze, bricht es die while-Schleife und liest nur erste Zeile aus Eingabeinformationen. Können Sie beraten, wie Skript neu zu schreiben, um nicht zu brechen, während Schleife mit EOF-Funktion:

while IFS= read -r snmp_cred; do 
echo appliance $ADDM_address and $snmp_cred 
snmp_ip=$(grep -E -o "([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})@" <<< $snmp_cred) 
snmp_ip=${snmp_ip%?} 
echo IP for snmp community is $snmp_ip 

json_file=$DIR/cred.json 
remote_dir=/some/remote/dir 

cat <<EOF > $DIR/cred.json 
    { 
     "some", 
     "json,   
    } 
EOF 


[Here goes some another commands] 

done <$DIR/input.txt 

Antwort

0

Der Code OK aussieht, aber Sie können mit cat ganz hier vermeiden. Verwenden Sie einfach echo oder printf.

printf '\ 
{ 
    "ip_range" : "%s", 
    "types" : [ "snmp" ], 
    "description" : "%s", 
    "snmp.version": "v2c", 
    "snmp.port" : 161, 
    "snmp.community" : "%s", 
    "snmp.retries" : 3, 
    "snmp.timeout" : 2 }' "$snmp_ip" "$snmp_cred" "$snmp_cred" > "$json_file" 

In der Regel, wenn Sie dynamische JSON zu erzeugen versuchen, müssen Sie über die Parameterwerte sorgen richtig codiert werden. In solchen Fällen sollten Sie in Betracht ziehen, Ihren JSON mit einem Tool wie jq zu generieren, anstatt es manuell zu erstellen.

jq -n --arg ipr "$ip_range" --arg cred "$snmp_cred" '{ 
    "ip_range" : $ipr, 
    "types" : [ "snmp" ], 
    "description" : $cred, 
    "snmp.version": "v2c", 
    "snmp.port" : 161, 
    "snmp.community" : $cred, 
    "snmp.retries" : 3, 
    "snmp.timeout" : 2 }' > "$json_file" 
+0

Das Problem ist, dass in JSON-Datei ich einige Variablen haben, und sie nicht ausdehnt, wenn ich Ihren Ansatz: –

+0

Hier wird die json Code - \t \t { \t \t \t "ip_range": „$ snmp_ip “ \t \t \t "Typen": [ "snmp"], \t \t \t "description": "$ snmp_cred", \t \t \t "snmp.version": "v2c", \t \t \t "snmp.port": 161, \t \t \t "snmp.community": "$ snmp_cred", \t \t \t "snmp.retries": 3, \t \t \t "snmp.timeout": 2 \t \t} –

+0

Ok, wenn ich jq verwende, gibt es mir Kompilierfehler: –

Verwandte Themen