Ich versuche, ein Bash-Skript zu schreiben, um verschiedene Aspekte eines Servers zu konfigurieren. Der Kontext hier ersetzt einen Wert einer Variablen in einer conf-Datei (ini-Format) durch einen anderen Wert.Update var in ini-Datei mit bash
Der Kontext ist
[ssh-iptables]
enabled = false
Und ich brauche einfach falsch wahr zu ändern.
Normalerweise würde ich tun dies nur mit einem einfachen Stück sed
sed -i 's/^enabled = false/enabled = true/g' /etc/fail2ban/jail.conf
Aber enabled = false
existiert in mehreren Orten.
Ich habe versucht, awk
ohne Erfolg mit
awk -F ":| " -v v1="true" -v opt="enabled" '$1 == "[ssh-iptables]" && !f {f=1}f && $1 == opt{sub("=.*","= "v1);f=0}1' /etc/fail2ban/jail.conf
Die oben von this forum thread bezogen wurde, aber ich weiß nicht wirklich genug zu verstehen, wie es in Skripten zu verwenden, damit es funktioniert. Alles, was es zu tun scheint, ist das Äquivalent von cat /etc/fail2ban/jail.conf
Ich habe ein paar andere Skripte gefunden, die wesentlich länger sind, was nicht ideal ist, da dies mit vielen Ini-Dateien passieren wird, so hoffe ich, jemand kann mir helfen, das zu korrigieren über Code oder weisen Sie mich in die richtige Richtung.
Entschuldigung, wenn dies auf ServerFault gehört, aber da es sich um Scripting und nicht um die Feinheiten der Serverkonfiguration handelt, würde ich mir vorstellen, dass es hier besser passt.
Dies funktioniert leider nicht. Es gibt einen Zeilenumbruch zwischen den 'tables]' und dem 'enabled =', aber das Entfernen hat keinen Unterschied gemacht. Sind Zeilenendungen usw. wichtig? –
@BenSwinburne Ich habe versehentlich die Position des ersten '^' beim Kopieren kopiert. Es sollte jetzt funktionieren. –
Es tut wirklich! Perfekt. Vielen Dank. –