Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[gelöst] Shell Script - Problem mit Strings und if Bedingung
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
Fijoldar
Apprentice
Apprentice


Joined: 10 Apr 2013
Posts: 248

PostPosted: Tue Apr 01, 2014 3:31 pm    Post subject: [gelöst] Shell Script - Problem mit Strings und if Bedingung Reply with quote

Hallo,

ich scheitere gerade an einem ziemlich einfachen Shell Script.
Code:
#!/bin/bash

s="$(xset q | grep "DPMS is")"

if [ "$s" == "DPMS is Enabled" ]
    then
        status="on"
    else
        status="off"
fi

echo $status


Der Teil mit dem "if" funktioniert leider nicht wie ich mir das wünsche. Die Bedingung ist nie erfüllt, obwohl sie es eigentlich sein sollte. Kann es sein, dass es daran liegt, dass der String Leerzeichen beinhaltet? Kann man das dann überhaupt so machen oder gibt es da einen anderen Weg? Wäre toll, wenn mir da jemand kurz einen Schubs in die richtige Richtung geben könnte.


Last edited by Fijoldar on Tue Apr 01, 2014 4:15 pm; edited 1 time in total
Back to top
View user's profile Send private message
ChrisJumper
Advocate
Advocate


Joined: 12 Mar 2005
Posts: 2225
Location: Germany

PostPosted: Tue Apr 01, 2014 3:38 pm    Post subject: Reply with quote

Ein kleiner Tipp. Das in den Eckigen Klammern ist ein indirekter Aufruf von test, schau dir mal

Code:
 $ man test


an. Heute nur die Kurzform weil nur auf dem Sprung bin.
Back to top
View user's profile Send private message
py-ro
Veteran
Veteran


Joined: 24 Sep 2002
Posts: 1733
Location: St. Wendel

PostPosted: Tue Apr 01, 2014 3:53 pm    Post subject: Reply with quote

Ich wette da sind zusätzliche Leerzeichen im String, zumindest wenn ich mir die xset -q Ausgabe bei mir ansehe, aber hübscher wäre es wohl so:

Code:
if xset -q | grep "DPMS is Enabled" > /dev/null
then
  status="on"
else
  status="off"
fi

echo $status


Kommt mit ein paar Subshells weniger aus.
Back to top
View user's profile Send private message
Fijoldar
Apprentice
Apprentice


Joined: 10 Apr 2013
Posts: 248

PostPosted: Tue Apr 01, 2014 4:00 pm    Post subject: Reply with quote

Danke! Das funktioniert prima. Das mit den zusätzlichen Leerzeichen hatte ich auch erst in Verdacht, aber ich habe mir extra mal die Variable ausgeben lassen und da ist kein zusätzliches Leerzeichen zu erkennen.
Back to top
View user's profile Send private message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1176

PostPosted: Tue Apr 01, 2014 4:02 pm    Post subject: Reply with quote

EDIT: innerhlab von subshells ist escapen nicht nötig anscheinend. wieder was gelernt.

ich glaube das problem ist hier:

Code:
s="$(xset q | grep "DPMS is")"


du verwendest geschachtelte anführungszeichen. da musst du die inneren escapen, also

Code:
s="$(xset q | grep \"DPMS is\")"
so.
sonst macht er die Anführungszeichen schon zu früh zu.
kannst das auch mit einem "echo $s" kontrollieren.
Back to top
View user's profile Send private message
Fijoldar
Apprentice
Apprentice


Joined: 10 Apr 2013
Posts: 248

PostPosted: Tue Apr 01, 2014 4:14 pm    Post subject: Reply with quote

Es gab ein Problem mit meiner Kontrolle. Ich hab mir nur echo $s ausgeben lassen und da waren natürlich keine Leerzeichen zu sehen. Wenn ich allerdings echo "$s" ausgeben lasse, erscheinen da tatsächlich vor dem String 2 Leerzeichen, die den Verdacht von py-ro bestätigen und natürlich zu einem unerwünschten Ergebnis führen.

Um die Leerzeichenproblematik zu umgehen, habe ich nun folgendes gemacht
Code:
#!/bin/bash

s="$(xset q | grep "DPMS is")"

if [[ $s == *Enabled* ]]
    then
        status="on"
    else
        status="off"
fi

echo $status

Das funktioniert nun. Das Skript von py-ro ist allerdings eleganter.

Mal schauen, ob ich das ganze irgendwie in meine i3status bar integrieren kann.
Back to top
View user's profile Send private message
toralf
Developer
Developer


Joined: 01 Feb 2004
Posts: 3690
Location: Hamburg

PostPosted: Thu Apr 03, 2014 6:36 pm    Post subject: Reply with quote

Fijoldar wrote:
Es gab ein Problem mit meiner Kontrolle. Ich hab mir nur echo $s ausgeben lassen und da waren natürlich keine Leerzeichen zu sehen. Wenn ich allerdings echo "$s" ausgeben lasse, erscheinen da tatsächlich vor dem String 2 Leerzeichen, die den Verdacht von py-ro bestätigen und natürlich zu einem unerwünschten Ergebnis führen.

Um die Leerzeichenproblematik zu umgehen, habe ich nun folgendes gemacht
Code:
#!/bin/bash

s="$(xset q | grep "DPMS is")"

if [[ $s == *Enabled* ]]
    then
        status="on"
    else
        status="off"
fi

echo $status

Das funktioniert nun.
Genau, und zwar exakt solange, wie Du keine Datei mit dem Namen "maiuwauwauiaEnableduswusf" im selben Verzeichnis wie das Script hast !
Back to top
View user's profile Send private message
Fijoldar
Apprentice
Apprentice


Joined: 10 Apr 2013
Posts: 248

PostPosted: Thu Apr 03, 2014 8:17 pm    Post subject: Reply with quote

@toralf: Könntest du das bitte etwas erläutern? Ich verstehe nicht so wirklich, worauf du hinaus willst. Ich habe den Fall einfach mal durchgespielt und eine Datei mit diesem Namen erstellt. Das hat nichts an der Funktionalität geändert. Ich wüsste auch nicht wieso :?
Back to top
View user's profile Send private message
toralf
Developer
Developer


Joined: 01 Feb 2004
Posts: 3690
Location: Hamburg

PostPosted: Thu Apr 03, 2014 8:55 pm    Post subject: Reply with quote

Fijoldar wrote:
@toralf: Könntest du das bitte etwas erläutern? Ich verstehe nicht so wirklich, worauf du hinaus willst. Ich habe den Fall einfach mal durchgespielt und eine Datei mit diesem Namen erstellt. Das hat nichts an der Funktionalität geändert. Ich wüsste auch nicht wieso :?
Ick, ich hätte schwören können, daß die Shell substituiert :
Code:
tfoerste@n22 ~/tmp $ ls *Enabled*
maiuwauwauiaEnableduswusf
, tut sie aber nicht auf Grund der doppelten eckigen Klammern. Mit einfachen Klammern hingegen würde genau das passieren :
Code:
~/tmp $ head -n 3 x.sh
#!/bin/sh
set -x

tfoerste@n22 ~/tmp $ ./x.sh
++ xset q
++ grep 'DPMS is'
+ s='  DPMS is Disabled'
+ '[' DPMS is Disabled == maiuwauwauiaEnableduswusf ']'
./x.sh: line 6: [: too many arguments
+ status=off
+ echo off
off
Back to top
View user's profile Send private message
3PO
Veteran
Veteran


Joined: 26 Nov 2006
Posts: 1105
Location: Schwabenländle

PostPosted: Fri Apr 25, 2014 7:44 pm    Post subject: Reply with quote

Warum nicht einfach:

Code:
xset q -d :0 |grep DPMS |grep -v : |awk '{print  $3 }'
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum