kaputtnik
Anmeldungsdatum: 31. Dezember 2007
Beiträge: 9245
|
Hallo! Leider bekomme ich im Betreff genannte Fehlerzeile nicht weg...Skript:
1
2
3
4
5
6
7
8
9
10
11
12
13 | #!/bin/bash
#dpkg --get-selections | awk '/deinstall|purge|hold/ {print $1}' > packages.list
for ZEILE in $(sed -n '1~1p' packages.list);do
#Abfrage
echo "Konfigurationsdateien von "$ZEILE" löschen (J/N)?"
read JN;
if[$JN == n];then
break
fi
#Configs löschen
#dpkg -P "$ZEILE"
done
|
Die Kommentare sind (noch) zur Sicherheit drin... Bash meckert immer das "then" in Zeile 8 an. Kann man in for-Schleifen keine if-Abfrage durchführen? Hab schon einiges probiert mit {} (C/CPP-Like) gehts auch nicht. "do" und/oder "then" in extra Zeile bringts auch net. Auch das "break" gefällt mir noch nicht. Kann man dort auch ein "continue" einfügen? Solange der Fehler kommt, kann ich ja nicht weitertesten... Vielen Dank für Hinweise kaputtnik PS: Ach ja, wo finde ich Angaben über "read"? In man 1 bash hab ich nix gefunden. Laut dieser Webseite kennt "read" auch den Parameter "-n" was bei mir aber zu einem Fehler führt.
|
xabbuh
Anmeldungsdatum: 25. Mai 2006
Beiträge: 6411
|
Da fehlen ein paar Leerzeichen:
if [ $JN == n ];then
break
fi
|
svenXY
Anmeldungsdatum: 22. September 2008
Beiträge: 542
Wohnort: Heidelberg
|
Hi, muss das nicht
if [ $JN == n ];then
break
fi
heissen? Also mit den Leerzeichen nach dem '[' und vor dem ']'??? Gruss, Sven
|
kaputtnik
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2007
Beiträge: 9245
|
Nächste Fehlermeldung:
[: 13: ==: unexpected operator Leerzeichen habe ich schon alles probiert...
|
xabbuh
Anmeldungsdatum: 25. Mai 2006
Beiträge: 6411
|
|
jahb
Anmeldungsdatum: 10. April 2008
Beiträge: 238
Wohnort: Reinfeld
|
kaputtnik schrieb: PS: Ach ja, wo finde ich Angaben über "read"? In man 1 bash hab ich nix gefunden. Laut dieser Webseite kennt "read" auch den Parameter "-n" was bei mir aber zu einem Fehler führt.
"read -n 1" klappt bei mir ganz wunderbar.
Nächste Fehlermeldung:
==: unexpected operator
Leerzeichen habe ich schon alles probiert...
Versuch mal das n in Hochkommas zu setzten. Schließlich ist das ein String!
|
comm_a_nder
Anmeldungsdatum: 5. Februar 2006
Beiträge: 2533
Wohnort: Dresden
|
kaputtnik schrieb: if[ "$JN" == "n" ];then
Man sollte beide Variablen in Hochkommas schreiben, um Fehler zu vermeiden (z.B. wenn $JN leer ist). PS: Ach ja, wo finde ich Angaben über "read"? In man 1 bash hab ich nix gefunden. Laut dieser Webseite kennt "read" auch den Parameter "-n" was bei mir aber zu einem Fehler führt.
Wie startest Du das Skript denn? Ich würde tippen mit sh ./Scriptname. Das würde Dein Skript nämlich unabhängig von Deinem Shebang mittels sh (und das it unter *buntu normalerweise eine Dash, keine Bash) ausführen. Was dann auch die fehlende Unterstützung für read -n erklären würde.
|
Dalai
Anmeldungsdatum: 16. Juni 2008
Beiträge: 2316
Wohnort: Meiningen
|
Versuch's mal mit einem einfachen Gleichheitszeichen. Die doppelten gibt's in Bash-Skripten nicht (für Vergleiche). MfG Dalai
|
comm_a_nder
Anmeldungsdatum: 5. Februar 2006
Beiträge: 2533
Wohnort: Dresden
|
Dalai schrieb: Versuch's mal mit einem einfachen Gleichheitszeichen. Die doppelten gibt's in Bash-Skripten nicht (für Vergleiche).
Komisch, dann lügt mich meine Manpage zur Bash an.
|
Dalai
Anmeldungsdatum: 16. Juni 2008
Beiträge: 2316
Wohnort: Meiningen
|
Es steht in der Manpage tatsächlich drin, aber ich habe bisher immer nur ein einzelnes verwendet (auch mit Shebang /bin/bash) - und das funktioniert einwandfrei. MfG Dalai
|
kaputtnik
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2007
Beiträge: 9245
|
Ok Jungs und Mädels(?), jetzt hauts hin. Es lag 1. an fehlenden Leerzeichen und zweitens an der falschen Befehlszeile zum Starten des scripts. Ich starte das Script jetzt einfach mit ./SCRIPTNAME oder "bash SCRIPTNAME". Nun geht aber weiter: Es erfolgt keine Verzweigung in den "if" zweig...
| for ZEILE in $(sed -n '1~1p' packages.list);do
#Abfrage
echo -e "Konfigurationsdateien von "$ZEILE" löschen (j/n)?"
read -n 1 JN;
if [ '$JN' == 'j' ];then
echo "Löschen der Konfigrationsdateien von "$ZEILE
#Configs löschen
#dpkg -P "$ZEILE"
fi
echo "Konfigurationsdateien von "$ZEILE" nicht gelöscht!"
done
|
Wenn ich 'j' drücke, wird nicht in den if-Zweig gesprungen. Es ist auch egal, ob ich mit zwei oder ein = abfrage. Am Bildschirm erscheint zwar ein j aber es erfolgt keine Verzweigung...?
|
Dalai
Anmeldungsdatum: 16. Juni 2008
Beiträge: 2316
Wohnort: Meiningen
|
Du musst doppelte Anführungszeichen statt einfache benutzen, weil die einfachen die Auswertung/Auflösung der Variablen $JN verhindern. MfG Dalai
|
kaputtnik
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2007
Beiträge: 9245
|
Ja, super... Danke! So funktionierts...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | #!/bin/bash
#dpkg --get-selections | awk '/deinstall|purge|hold/ {print $1}' > packages.list
JN="n"
for ZEILE in $(sed -n '1~1p' packages.list);do
if [ "$JN" == "n" -o "$JN" == "j" ];then
#Abfrage
echo -e "Konfigurationsdateien von "$ZEILE" löschen (j/n/a=alle löschen)?"
read -n 1 -s JN;
fi
if [ "$JN" == "j" -o "$JN" == "a" ];then
echo "Löschen der Konfigrationsdateien von "$ZEILE
#Configs löschen
#dpkg -P "$ZEILE"
else
echo "Konfigurationsdateien von "$ZEILE" nicht gelöscht!"
fi
done
|
Und nur mit == als Vergleichsoperator!
|
kaputtnik
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2007
Beiträge: 9245
|
Und als Abschluss noch ne Erfolgsmeldung: Das script fand ca 270 Programme, deren alte Konfigurationsdateien nicht entfernt wurden. Nach Test hin und Test her habe ich es dann gewagt und alle diese Dateien mit dem Script löschen lassen... dabei huschten diverse Warnungen an meinen Augen vorüber... auch solche Meldungen mit linux-generic-xxx 😕 ... einmal poppte ein zusätzliches Fenster mit einer Zusatzfrage auf:"Wollen sie sql-server wirklich entfernen?" NO!... dann wurde es still... das Script hatte seine Arbeit getan... ein ängstliches Reboot, wohlweislich mit der Vermutung, das ich mein System vllt neu aufsetzen muss... hab mir während des reboots vorsichtshalber mal n Bier geholt ... ... ... Als ich wiederkam lief der Rechner ohne Probleme, ohne Fehler 😎 ( oder noch nicht 😬 ) Es wäre jetzt nur interessant zu wissen gewesen, wie viel Speicherplatz frei geschaufelt wurde. Naja, die nächste Erweiterung für das Script...
- debConfigsDel.sh (1.2 KiB)
- Download debConfigsDel.sh
|