ubuntuusers.de

Parameter(gruppe) in shell-Skript einlesen

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

paulph

Anmeldungsdatum:
8. März 2013

Beiträge: 22

Hallo zusammen, ich komme bei folgendem Problem nicht weiter und würde mich über Eure Hilfe freuen: ich möchte in ein Shell-Script Parameter aus einer Textdatei einlesen, jedoch enthält die Datei zwei Gruppe an Parametern

Die test.conf Datei soll so aussehen

[IP-Adressen]
192.168.1.34
192.168.1.50
192.168.1.98

[Uhrzeit]
09
12
14
20

In einem Shell-Script möchte ich nun an einer Stelle die IP-Adressen aus der Datei test.conf auslesen und an einer anderen Stelle die Uhrzeiten. Wie kann ich das gestalten? Über konstruktive Hinweise würde ich mich sehr freuen.

Vielen Dank im Voraus

Bearbeitet von rklm:

Codeblock. Bitte beachte Forum/Syntax!

paulph

(Themenstarter)

Anmeldungsdatum:
8. März 2013

Beiträge: 22

Hallo,

vielleicht noch als Ergänzung zum besseren Verständnis. Die beiden angesprochenen Parameterblöcke befinden sich zur Zeit im ausführbaren Shell-Script und werden an den verschiedenen Stellen über Schleifen eingelesen. Ich möchte nun diese beiden Blöcke in eine *.conf-Datei auslagern, um bei Veränderungen nicht jedes Mal die ausführbare Datei anfassen zu müssen.

Danke im Voraus

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11265

Wohnort: München

Ich würde mir falls möglich eine bessere Datenstruktur überlegen (JSON wäre mit jq z.B. einfach zu verarbeiten)... - aber im Prinzip musst du für eine Datei im ini-Stil zeilenweise über die Datei laufen und dann hat den gewünschten Bereich nach einer eckigen Klammer ausgeben - mal ganz grob:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash
declare -a args
wanted_section="$1"

on_section=0
while read -r line; do
    [[ "$line" =~ "$wanted_section" ]] && { on_section=1; continue; }
    [[ "$line" =~ "[" ]] && on_section=0
    [ $on_section -eq 0 ] && continue
    args+=($line)
done < test.conf
echo "${args[@]}"
$ ./parser.sh '[Uhrzeit]'
09 12 14 20
$ ./parser.sh '[IP-Adressen]'
192.168.1.34 192.168.1.50 192.168.1.98 

paulph

(Themenstarter)

Anmeldungsdatum:
8. März 2013

Beiträge: 22

Super, vielen Dank für die Hilfe, jetzt kann ich weitermachen.

Antworten |