PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : awk arbeitet nicht in der schleife



nieselfriem
13.08.13, 09:06
Hallo!

Ich will mittels einer Schleife die ein Array abarbeitet mit awk Zeilen löschen in denen das Element in der aktuellen Arrayposition erhalten gelöscht wird.



for((i=0;i<${#value };i++))
do
user=${value[$i]};
echo "awk '!/$user/' /opt/ftp_data/ad_user/passwd > /opt/ftp_data/ad_user/passwd.tmp && mv -f /opt/ftp_data/ad_user/passwd.tmp /opt/ftp_data/ad_user/passwd"

awk '!/$user/' /opt/ftp_data/ad_user/passwd > /opt/ftp_data/ad_user/passwd.tmp && mv -f /opt/ftp_data/ad_user/passwd.tmp /opt/ftp_data/ad_user/passwd
done
}


Leider passiert mit meinem Skript gar nichts.
Ich habe mir den Befehl per set -x ausgeben lassen. Wenn ich die Ausgabe des awk-Befehls dann kopiere und manuell auf der Konsole ausführe, wird dann die entsprechende Zeile gelöscht.
Was mach ich falsch?

VG niesel

Efraim
13.08.13, 10:17
$user in Singlequotes eingeschlossen wird nicht aufgelöst. Du musst etwas geschickter quoten:

awk '!'"/$user/" ...

nieselfriem
13.08.13, 10:27
OK danke. Ich habe es nun mit sed gelöst. Aber für zukünftige sachen ist das sicherlich sehr hilfreich :)



sed -i".bak" "/$user/d" /opt/ftp_data/ad_user/passwd


VG niesel

Efraim
13.08.13, 10:47
Jau. Immer dran denken, dass sich zuerst die Shell (Bash) über die Zeilen hermacht. Im Beispiel soll $user aufgelöst werden, aber nicht das Ausrufezeichen.