Rechnungstore
Anmeldungsdatum: 18. Februar 2011
Beiträge: 164
|
Hallo miteinander, da ich einen Ryzen-Prozessor besitze, verwende ich den aktuellen Kernel aus dem Mainline-Archiv. Ich habe habe versucht, ein kleines Script zu schreiben, welches prüft, ob eine neuere Kernelversion vorhanden ist. Eigentlich scheint es ganz gut zu funktionieren, nur leider legt es in dem Verzeichnis, in welchem es ausgeführt wird immer eine leere Datei an, die den Namen des Inhalts der Variable "neuver" trägt. Auch das Anfügen der Zeile am Ende des Scriptes, vermag diese Datei nicht zu löschen. Ansonsten (außerhalb des Scriptes) lässt sich die Datei aber problemlos löschen. Die Datei hat die Berechtigungen 644 und gehört mir (Nutzer und Gruppe). Hier das Script: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 | #!/bin/bash
curver=$(uname -r)
neuver=$(echo $curver | cut -d- -f1)
echo "Aktuelle Kernelversion = $neuver"
biggest=$(lynx -dump -nolist http://kernel.ubuntu.com/~kernel-ppa/mainline/ | grep 'v4' | grep -v '\-rc' | tr -s ' '| cut -d ' ' -f3 | sed s/v//g | sed 's/\///g' | tail -1)
echo "Höchste verfügbare Kernelversion = $biggest"
if [ $biggest>$neuver ]
then
echo "Es ist eine neuere Kernelverion verfügbar"
read -p "Soll die Version $biggest heruntergeladen werden? y/n: " eingabe
echo $eingabe
if [ $eingabe == "y" ]
then
firefox http://kernel.ubuntu.com/~kernel-ppa/mainline/ &
exit 0
else
echo "dann halt nicht"
exit 0
fi
else
echo "Kernelversion ist aktuell"
fi
exit 0
|
Ich kann das gerade überhaupt nicht nachvollziehen und wäre für jede Hilfe dankbar Grüße Rechnungstore
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 8616
Wohnort: Münster
|
Rechnungstore schrieb: […] #!/bin/bash
[…]
if [ $biggest>$neuver ]
then
[…]
Diese Zeile ist syntaktisch falsch. Als Nebeneffekt wird der Inhalt von $biggest per Ausgabe-Umleitung (>) auf eine Datei mit dem ersten Wort von $neuver als Dateinamen geschrieben. Vielleicht funktioniert [[ $biggest > $neuver ]] besser. Beachte die Leerzeichen um den Operator. In der Bash-Dokumentation findest Du auch Wissenswertes über den Unterschied zwischen [ und [[ und über das Quoting von Variablen. Versuche auch mal #!/bin/bash -e. Das Skript bricht dann ab, wenn ein Fehler auftritt – genauer: Wenn ein Befehl ein Ergebnis ungleich 0 liefert.
.
|
Rechnungstore
(Themenstarter)
Anmeldungsdatum: 18. Februar 2011
Beiträge: 164
|
@kB Ich danke Dir! Das war der Grund und Dein Lösungsvorschlag hat auch funktioniert. Zudem habe ich jetzt herausgefunden warum ein
am Ende des Sciptes nicht ausgeführt wird. Da bei mir gerade immer die Bedingung erfüllt ist, dass $biggest größer ist als $neuver und die Bash somit schon vorher auf
trifft. Ziemlich dummer Anfängerfehler. Naja, dann werde ich mich jetzt noch ein bisschen mit regulären Ausdrücken rumärgern und das Script dann dazu bringen, die richtige Kernelversion mit wget herunterzuladen und auf Wunsch zu installieren.
|
MisterIgo
Anmeldungsdatum: 23. April 2009
Beiträge: 947
|
Wenn man die Bash nicht verwenden will/kann, hilft auch immer ein Blick in
man test
bzw. in diesem Fall resultierend in der Bedingung:
if [ $foo -gt $bar ]; then ...
|
Rechnungstore
(Themenstarter)
Anmeldungsdatum: 18. Februar 2011
Beiträge: 164
|
Hallo nochmal, auch wenn das Thema eigentlich gelöst ist, habe ich dennoch einen wichtigen Nachtrag zu vermelden. Das Script ist in seiner gestrigen Form komplett falsch und so möchte ich es hier nicht stehen lassen. Durch die Kernelversionsnummerm mit den Punkten dazwischen musste einiges geändert werden. Die Versionsnummern lassen sich dadurch nicht ohne Weiteres vergleichen. Dass es gestern klappte, war purer Zufall, da die höchste Versionsnummer 4.12 war. Seit heute gibt es 4.12.1 und somit offenbarte sich die Notwendigkeit massiver Veränderungen. Hier die aktuelle Version: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 | 1 #!/bin/bash
2
3 curver=$(uname -r)
4 neuver=$(echo $curver | cut -d- -f1)
5
6 echo "Aktuelle Kernelversion = $neuver"
7
8 highest=$(lynx -dump -nolist http://kernel.ubuntu.com/~kernel-ppa/mainline/ | grep "v4" | grep -v '\-rc' | tr -s ' '| cut -d ' ' -f3 | sed s/v//g | sed 's/\///g' | sort -t. -V | tail -1)
9
10 echo "Höchste verfügbare Kernelversion = $highest"
11
12 ver1=$(echo $neuver | cut -d. -f1)
13 ver2=$(echo $neuver | cut -d. -f2)
14 ver3=$(echo $neuver | cut -d. -f3)
15
16 high1=$(echo $highest | cut -d. -f1)
17 high2=$(echo $highest | cut -d. -f2)
18 high3=$(echo $highest | cut -d. -f3)
19
20 if [ "$high1" -ge "$ver1" ]
21 then
22 if [ "$high2" -ge "$ver2" ]
23 then
24 if [ "$high3" -gt "$ver3" ] || [ "$high2" -gt "$ver2" ]
25 then
26 echo "Es ist eine neuere Kernelverion verfügbar"
27 read -p "Soll die Version $highest heruntergeladen werden? y/n: " eingabe
28 echo $eingabe
29 if [ $eingabe == "y" ]
30 then
31 firefox http://kernel.ubuntu.com/~kernel-ppa/mainline/ &
32 exit 0
33 else
34 echo "dann halt nicht"
35 exit 0
36 fi
37 else
38 echo "Kernelversion ist aktuell"
39 fi
40 else
41 echo "Kernelversion ist aktuell"
42 fi
43 else
44 echo "Kernelversion ist aktuell"
45 fi
46
47 exit 0
|
Ich habe es durch-getestet, indem ich die Zeilen 3 und 4 auskommentiert und der Variablen "neuver" manuell verschiedene Werte zugewiesen habe. Ich hoffe, es stimmt jetzt alles, sicher bin ich mir da aber nicht. Falls jemand, der Ahnung vom Scripten/Programmieren hat, noch Fehler finden sollte, wäre ich für Feedback sehr dankbar. Grüße Rechnungstore
|
Rechnungstore
(Themenstarter)
Anmeldungsdatum: 18. Februar 2011
Beiträge: 164
|
Nachtrag die Zweite: War immer noch nicht richtig. Jetzt stimmt es (hoffentlich!!!). 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 | 1 #!/bin/bash
2
3 curver=$(uname -r)
4 neuver=$(echo $curver | cut -d- -f1)
5
6 echo "Aktuelle Kernelversion = $neuver"
7
8 highest=$(lynx -dump -nolist http://kernel.ubuntu.com/~kernel-ppa/mainline/ | grep "v4" | grep -v '\-rc' | tr -s ' '| cut -d ' ' -f3 | sed s/v//g | sed 's/\///g' | sort -t. -V | tail -1)
9
10 echo "Höchste verfügbare Kernelversion = $highest"
11
12 ver1=$(echo $neuver | cut -d. -f1)
13 ver2=$(echo $neuver | cut -d. -f2)
14 ver3=$(echo $neuver | cut -d. -f3)
15
16 high1=$(echo $highest | cut -d. -f1)
17 high2=$(echo $highest | cut -d. -f2)
18 high3=$(echo $highest | cut -d. -f3)
19
20 if [ "$ver1" -gt "$high1" ]
21 then
22 echo "Kernel ist aktuell"
23 exit 0
24 else
25 if [ "$ver2" -gt "$high2" ] && [ "$ver1" -eq "$high1" ]
26 then
27 echo "Kernel ist aktuell"
28 exit 0
29 else
30 if [ "$ver3" -ge "$high3" ] && [ "$ver2" -eq "$high2" ] && [ "$ver1" -eq "$high1" ]
31 then
32 echo "Kernel ist aktuell"
33 exit 0
34 else
35 echo "Es ist eine neuere Kernelversion verfügbar"
36 read -p "Soll die Version $highest heruntergeladen werden? y/n: " eingabe
37 if [ $eingabe == "y" ]
38 then
39 firefox firefox http://kernel.ubuntu.com/~kernel-ppa/mainline/ &
40 exit 0
41 else
42 echo "dann halt nicht"
43 exit 0
44 fi
45 fi
46 fi
47 fi
48
49 exit 0
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Rechnungstore schrieb: Nachtrag die Zweite: War immer noch nicht richtig. Jetzt stimmt es (hoffentlich!!!).
Aber warum postest Du die Zeilennummern? Das macht doch schon unser Syntaxhighlighting. Zeile 8 kannst Du vereinfachen zu: | highest=$(lynx -dump -nolist http://kernel.ubuntu.com/~kernel-ppa/mainline \
| sed -n 's#.*v\([0-9]\+\(\.[0-9]\+\)\+\).*#\1#p' | sort -Vru | head -1)
|
😉
|
Rechnungstore
(Themenstarter)
Anmeldungsdatum: 18. Februar 2011
Beiträge: 164
|
@rklm Danke für den Tipp! Ich dachte mir schon, dass man in Zeile 8 das Ganze eleganter lösen kann. Im Moment kann ich den Sed-Befehl aber nicht detailliert nachvollziehen. In meiner etwas weniger effizienten Form, verstehe ich das Script wenigstens. Die Zeilennummern sind versehentlich beim Kopieren von VIM ins Forum mitgepostet worden. Ich habe das ganze jetzt noch ein wenig erweitert, was auch wieder wesentlich komplizierter war als erwartet. wget mit Wildcards in der Art | wget -r --no-parent -A '*.deb' http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.12.1/
|
oder Ähnliches klappt scheinbar leider nicht (lädt immer nur die index.hmtl und die robots.txt herunter). Von daher ist Zeile 39 auch etwas lang geraten. Hier die neue Version (ohne zusätzliche Zeilennummern): 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 | #!/bin/bash
curver=$(uname -r)
neuver=$(echo $curver | cut -d- -f1)
echo "Aktuelle Kernelversion = $neuver"
highest=$(lynx -dump -nolist http://kernel.ubuntu.com/~kernel-ppa/mainline/ | grep "v4" | grep -v '\-rc' | tr -s ' '| cut -d ' ' -f3 | sed s/v//g | sed 's/\///g' | sort -t. -V | tail -1)
echo "Höchste verfügbare Kernelversion = $highest"
ver1=$(echo $neuver | cut -d. -f1)
ver2=$(echo $neuver | cut -d. -f2)
ver3=$(echo $neuver | cut -d. -f3)
high1=$(echo $highest | cut -d. -f1)
high2=$(echo $highest | cut -d. -f2)
high3=$(echo $highest | cut -d. -f3)
if [ "$ver1" -gt "$high1" ]
then
echo "Kernel ist aktuelli 1"
exit 0
else
if [ "$ver2" -gt "$high2" ] && [ "$ver1" -eq "$high1" ]
then
echo "Kernel ist aktuelli 2"
exit 0
else
if [ "$ver3" -ge "$high3" ] && [ "$ver2" -eq "$high2" ] && [ "$ver1" -eq "$high1" ]
then
echo "Kernel ist aktuelli 3"
exit 0
else
echo "Es ist eine neuere Kernelversion verfügbar"
read -p "Soll die Version $highest heruntergeladen werden? y/n: " eingabe
if [ $eingabe == "y" ]
then
curl http://kernel.ubuntu.com/~kernel-ppa/mainline/v$highest/ | egrep -o '\<linux.*amd64.deb\>|\<linux.*all.deb\>' | cut -d\> -f2 | sort | uniq | grep -v 'lowlatency' | xargs -i wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v$highest/{}
read -p "Soll die Version $highest installiiert werden? (nur möglich wenn Script als root ausgeführt wird) y/n: " eingabe2
if [ $eingabe2 == "y" ]
then
dpkg -i --dry-run *.deb
rm -f *.deb
echo "Kernel wurde installiert und die Paketdateien wurden gelöscht"
exit 0
else
echo "Kernel wird nicht installiert, Paketdateien bleiben zur späteren Installation erhalten"
exit 0
fi
exit 0
else
echo "dann halt nicht"
exit 0
fi
fi
fi
fi
exit 0
|
PS: Das --dry-run in Zeile 43 muss natürlich weg, wenn man es nutzen möchte.
|
sinusQ
Anmeldungsdatum: 27. Oktober 2010
Beiträge: 193
Wohnort: Neudau
|
Hallo, die Zeilen 3 und 4 kannst du auch noch zusammenfassen, da curver sonst nirgends verwendet wird: | #alt
curver=$(uname -r)
neuver=$(echo $curver | cut -d- -f1)
#neu
neuver=$(uname -r | cut -d- -f1)
|
|
Rechnungstore
(Themenstarter)
Anmeldungsdatum: 18. Februar 2011
Beiträge: 164
|
@sinusQ Danke für das Feedback. Leuchtet mir ein, Dein Vorschlag. Hätte ich auch selbst drauf kommen können. Grüße Rechnungstore
|