furryhamster
Lt. Commander
- Registriert
- Okt. 2008
- Beiträge
- 1.101
Hi,
ich möchte in der Shell zwei bzw drei Config-Files abgleichen. Dabei gibt es immer eine Source-Config-File und eine ODER zwei Ziel-Config-Files.
Heißt: Die Source-Config-File beinhaltet alle Variablen. Die Ziel Config Files beinhalten alle oder einen Teil der Variablen. Der Abgleich soll nur testen, ob die Variable existiert. Der Zuweisungswert kann unterschiedlich sein.
Die Config Files sind immer gleich aufgebaut. Beispiel:
Mein Lösungsansatz war jetzt die Source Config File mit awk zu durchlaufen und das = als Trenner zu verwenden. Bei diesem Lösungsansatz besteht mein Problem jedoch darin, dass ich zum einen die Ziel-Source File in der While Schleife nur 1x durchlaufen wird und ich außerdem Probleme habe nur den Variablen-Namen zu ermitteln..
Hier mal der bisherige Ansatz:
ich möchte in der Shell zwei bzw drei Config-Files abgleichen. Dabei gibt es immer eine Source-Config-File und eine ODER zwei Ziel-Config-Files.
Heißt: Die Source-Config-File beinhaltet alle Variablen. Die Ziel Config Files beinhalten alle oder einen Teil der Variablen. Der Abgleich soll nur testen, ob die Variable existiert. Der Zuweisungswert kann unterschiedlich sein.
Die Config Files sind immer gleich aufgebaut. Beispiel:
--Kommentar
variable1=wert1
variable2=wert2
-- Kommentar
variable3=wert3
Mein Lösungsansatz war jetzt die Source Config File mit awk zu durchlaufen und das = als Trenner zu verwenden. Bei diesem Lösungsansatz besteht mein Problem jedoch darin, dass ich zum einen die Ziel-Source File in der While Schleife nur 1x durchlaufen wird und ich außerdem Probleme habe nur den Variablen-Namen zu ermitteln..
Hier mal der bisherige Ansatz:
Code:
function compare_defines {
SOURCE_FILE=$1
TARGET_FILE_1=$2
TARGET_FILE_2=$3
if [ -z ${TARGET_FILE_2} ]
then
if [ -r ${SOURCE_FILE} ] && [ -r ${TARGET_FILE_1} ]
then
awk -v SOURCE_FILE="${SOURCE_FILE}" -v TARGET_FILE_1="${TARGET_FILE_1}" -F '=' '{
print "+++++++++++++++++++++++++++"
print $0
while (( getline line<TARGET_FILE_1) > 0 ) {
print "-------------------"
print line
}
print "+++++++++++++++++++++++++++"
}' ${SOURCE_FILE}
else
echo "Konnte define-File nicht lesen"
return 1
fi
else
if [ -r ${SOURCE_FILE} ] && [ -r ${TARGET_FILE_1} ] && [ -r ${TARGET_FILE_2} ]
then
echo "tue etwas"
else
echo "Konnte define-File nicht lesen"
return 1
fi
fi
}
Zuletzt bearbeitet:
(Ergänzung)