Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?
25.07.2021, 02:50:47

.
Einloggen mit Benutzername, Passwort und Sitzungslänge

Mitglieder
  • Mitglieder insgesamt: 25777
  • Letzte: wombat1
Statistiken
  • Beiträge insgesamt: 746694
  • Themen insgesamt: 60054
  • Heute online: 248
  • Am meisten online: 2287
  • (22.01.2020, 19:20:24)
Benutzer Online
Mitglieder: 3
Gäste: 170
Gesamt: 173

Autor Thema:  4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?  (Gelesen 6052 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #15 am: 10.01.2015, 22:42:09 »
Ich finde diese Variante etwas eleganter, funktional sind beide gleichwertig:
#!/bin/bash
m=`date +%m`
if [[ '03 04 05' =~ $m ]]
    then gsettings set org.mate.background picture-filename '/pfad/zu/deinem/bild_01.jpg'
  elif [[ '06 07 08' =~ $m ]]
    then gsettings set org.mate.background picture-filename '/pfad/zu/deinem/bild_02.jpg'
  elif [[ '09 10 11' =~ $m ]]
    then gsettings set org.mate.background picture-filename '/pfad/zu/deinem/bild_03.jpg'
  else gsettings set org.mate.background picture-filename '/pfad/zu/deinem/bild_04.jpg'
fi

@Nessie:
Beeindruckend was so alles möglich ist.. abe mir ist das zu unleserlich :)

Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #16 am: 10.01.2015, 23:58:43 »
Das ist doch nur ein kleiner Arithmetik-Trick, um je nach Tageszahl (ermittelt mit "date %j") direkt den richtigen Index für das Bildnamen-Array b[] (0=Frühling, 1=Sommer, 2=Herbst, 3=Winter) zu bekommen.

ZeckeSZ

  • Gast
Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #17 am: 11.01.2015, 00:50:45 »
#!/bin/bash
m=`date +%m`
if [[ '03 04 05' =~ $m ]]
Schick, das werde ich mir gleich mal merken ;)
« Letzte Änderung: 11.01.2015, 09:42:33 von ZeckeSZ »

Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #18 am: 11.01.2015, 12:09:33 »
Danke @ All

#!/bin/bash
m=`date +%m`
if [[ '03 04 05' =~ $m ]]
    then gsettings set org.mate.background picture-filename '/pfad/zu/deinem/bild_01.jpg'
  elif [[ '06 07 08' =~ $m ]]
    then gsettings set org.mate.background picture-filename '/pfad/zu/deinem/bild_02.jpg'
  elif [[ '09 10 11' =~ $m ]]
    then gsettings set org.mate.background picture-filename '/pfad/zu/deinem/bild_03.jpg'
  else gsettings set org.mate.background picture-filename '/pfad/zu/deinem/bild_04.jpg'
fi

Eine frage habe Ich noch es Fehlen 12 01 02 Als Monat sind die Automastich in der zeile mit Bild 4 ?
Wie würde das Script aussehen wenn es Monatlich wer .

#!/bin/bash
m=`date +%m`
if [[ '01' =~ $m ]]
    then gsettings set org.mate.background picture-filename '/pfad/zu/deinem/bild_01.jpg'
  elif [[ '02' =~ $m ]]
    then gsettings set org.mate.background picture-filename '/pfad/zu/deinem/bild_02.jpg'

würde das so gehen nur mit Denn Letzten Scriptteil Verstehe Ich es nicht so gut !


  else gsettings set org.mate.background picture-filename '/pfad/zu/deinem/bild_04.jpg'
fi

fi


Aber sonst ist alles das was Ich wollte DANKE

ZeckeSZ

  • Gast
Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #19 am: 11.01.2015, 12:56:42 »
Eine frage habe Ich noch es Fehlen 12 01 02 Als Monat sind die Automastich in der zeile mit Bild 4 ?
Genau so, Bild 4 wird immer dann angezeigt, wenn "$m" irgend ein anderer Wert als 03 bis 11 zugewiesen wurde.

Zitat
Wie würde das Script aussehen wenn es Monatlich wer
if [ "$m" = "01" ]
usw.

Edit 1:
Korrigiert: Inhalt einer Variable auf Gleichheit prüfen
Edit 2:
2. Korrektur:  Inhalt einer Variable auf Gleichheit prüfen
« Letzte Änderung: 14.01.2015, 09:19:38 von ZeckeSZ »

Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #20 am: 11.01.2015, 20:10:46 »
Wenn Ich es so Probiere geht es nicht

m=`date +%m`
if if [ $m = "01" ]
    then gsettings set org.mate.background picture-filename '/home/peter/Wallpapers/frühling.jpg'
if if [ $m = "02" ]
    then gsettings set org.mate.background picture-filename '/home/peter/Wallpapers/frühling.jpg'
if if [ $m = "03" ]
    then gsettings set org.mate.background picture-filename '/home/peter/Wallpapers/frühling.jpg'
if if [ $m = "04" ]
    then gsettings set org.mate.background picture-filename '/home/peter/Wallpapers/frühling.jpg'
if if [ $m = "05" ]
    then gsettings set org.mate.background picture-filename '/home/peter/Wallpapers/frühling.jpg'
if if [ $m = "06" ]
    then gsettings set org.mate.background picture-filename '/home/peter/Wallpapers/frühling.jpg'
 
fi

Eigentlich ist es ja gelöst aber die neugier hat mich gepackt und nun möchte Ich wissen Wie es Monatlich geht  ::)

Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #21 am: 11.01.2015, 20:17:07 »
Du musst == benutzen nicht = ( "=" = Zuweisung einer Variable, "==" = prüfen auf Gleichheit)

Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #22 am: 11.01.2015, 20:42:20 »
mit if wird es ja Geprüft.

sollte es dann so aussehen ?
if [ $m == "01" ]
    then gsettings set org.mate.background picture-filename '/home/peter/Wallpapers/frühling.jpg'

usw
?

Bei mir kommt ein Fehler /home/peterbin/pic6: Zeile 30: Syntaxfehler: Unerwartetes Dateiende.
« Letzte Änderung: 11.01.2015, 20:48:27 von C64 »

Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #23 am: 11.01.2015, 21:04:10 »
Du brauchst natürlich auch nur ein if pro Abfrage. Also if [ .... ] und nicht if if [ ... ]Edit; und du musst jedes if mit einem fi schließen, also
if [ ... ]
then ...
fi

ZeckeSZ

  • Gast
Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #24 am: 12.01.2015, 07:04:54 »
Du musst == benutzen nicht =
Sorry, hab ich übersehen (oben korrigiert) :(

Zitat
und du musst jedes if mit einem fi schließen, also
if [ ... ]
then ...
fi
Deshalb nimm auch besser "elif", das ist eine Kombi aus if und else und erweitert die if-Abfrage, um alternative Befehle auszuführen, wenn die ursprüngliche Bedingung (hier: [ $m == "01" ]) nicht zutrifft. Diese Befehle werden aber immer nur ausgeführt, wenn "elif"  ([ $m == "02" ] usw.) auch zutrifft (im Gegensatz zu "else"). Den kompletten if-Block schließt du dann mit einem "fi" ab.

« Letzte Änderung: 12.01.2015, 07:57:09 von ZeckeSZ »

Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #25 am: 14.01.2015, 04:20:17 »
Das einfache = ist übrigens richtig:
~> help [
[: [ arg... ]
    This is a synonym for the "test" builtin ...

[ ist also test:
~> help test
...
    String operators:
...
        STRING1 = STRING2
                       True if the strings are equal.

Eigentlich klar: Test kann gar nichts zuweisen, also ist = hier ein korrekter Vergleich.

ZeckeSZ

  • Gast
Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #26 am: 14.01.2015, 09:16:53 »
Das einfache = ist übrigens richtig:

Ich hab's grad mal getestet, komischerweise arbeitet das Script sowohl mit "=" als auch mit "==" einwandfrei.

Frage: hätte ich die Variable korrekterweise mit "-eq"  vergleichen sollen?
if [ $m -eq 01 ]
    then...
"m=`date +%m`" ergibt schließlich immer eine Ganzzahl.

Zitat
Ganzzahlvergleiche:
n1 -eq n2    n1 ist gleich n2

http://www.selflinux.org/selflinux/html/shellprogrammierung03.html

Oder hier: http://www.netzmafia.de/skripten/unix/unix8.html
Zitat
Vergleichsoperatoren
Bei Vergleichen wird auch gerne '=' und '-eq' verwechselt. '=' vergleicht Zeichenketten ('==' gibt es übrigens auch nicht), '-eq' Zahlen. Bedauerlicherweise ist es bei Perl wieder genau andersrum.

a=" 4096"

if [ "$a" = 4096 ]      # Stringvergleich liefert FALSCH
if [ "$a" -eq 4096 ]    # Zahlenvergleich liefert WAHR


Dazu kommt noch, dass ich "$m" in "" hätte setzen sollen:
Zitat
Quoting
Denken Sie auch daran, dass bei Vergleichen die Variablen innerhalb der eckigen Klammern sinnvollerweise in Gänsefüsschen stehen sollten, z. B.:

a=""                    # Leerstring

if [ $a = "yes" ]       # Die Bash bricht mit Fehlermeldung ab, denn es
                        # die Klammer ergibt [  = "yes" ]
                       
if [ "$a" = "yes" ]     # ergibt FALSCH; Ausführung läuft weiter                       

Vergessen Sie auch nicht, dass alles, was Leerzeichen oder irgendwelche Sonderzeichen enthält, am Besten in Gänsefüsschen eingeschlossen wird.


Hab ich auch ausprobiert. Sollte "$m" aus irgend einem Grund leer sein und nicht eine Ganzzahl ergeben, hagelt es bis zum "else" Fehlermeldungen:
Zitat
./test.sh: Zeile 5: [: =: Einstelliger (unärer) Operator erwartet.

Mit "" eingeschlossen läuft es ohne Fehler durch bis "else".

In jedem Fall habe ich festgestellt, dass ich, gerade was das scripting angeht, noch gewaltig in den Kinderschuhen stecke  :(



Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #27 am: 14.01.2015, 11:48:11 »
Hier läuft alles aufs selbe hinaus:
$: [ `date +%m` = 01 ] && echo true
true

$: [ `date +%m` -eq 01 ] && echo true
true
Der Unterschied zwischen -eq und = macht sich hier bemerkbar
$: [ `date +%m` -eq 1 ] && echo true
true

$: [ `date +%m` = 1 ] && echo true


ZeckeSZ

  • Gast
Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #28 am: 14.01.2015, 12:25:28 »
Hier läuft alles aufs selbe hinaus:
$: [ `date +%m` = 01 ] && echo true
true

$: [ `date +%m` -eq 01 ] && echo true
true

Das kann man auch noch ein wenig weiter treiben:
test@r122 ~ $ [ " `date +%m`" = 01 ] && echo true

test@r122 ~ $ [ " `date +%m`" -eq 01 ] && echo true
true
Dem "-eq" ist das führende Leerzeichen des Wertes egal, das als String behandelte " 01" dem  "=" logischerweise nicht.

Re: 4 Jahreszeiten mit einen Hintergrund automatisch Wescheln ?
« Antwort #29 am: 14.01.2015, 14:44:59 »
Ich würde in diesem Fall Zeichenketten vergleichen, also alles in doppelten Anführungszeichen.

Bei Zahlenvergleichen möchte ich dies sofort erkennen können, deshalb bevorzuge ich dort die runden Klammern:
~> m=07 ; (( $m == 7 )) && echo true
true

Man muss hierbei unbedingt beachten, dass die Bash Zahlen mit führenden Nullen als Oktalzahl auffasst, das Beispiel geht nur bis 07 gut:
~> m=08 ; (( $m == 8 )) && echo true
bash: ((: 08: value too great for base (error token is "08")
Eine oktale 8 gibt es nun mal nicht.


Die Zahlen von date müssen dazu also explizit als Dezimalzahlen gewandelt werden:
~> # Oktal:
~> echo $(date +%m)
01
~> # Dezimal:
~> echo $((10#$(date +%m)))
1

Backticks mag ich übrigens nicht, weil zu schlecht Lesbar. $() kann man besser lesen.