2009-07-28 34 views
5

Ich möchte überprüfen, ob meine Zeichenfolge ein oder mehrere Sternchen enthält.Überprüfen, ob eine Zeichenfolge Asterisk (*) enthält

Ich habe dies versucht:

if [[ $date_alarm =~ .*\*.* ]] 
then 
    ... 
fi 

Es funktionierte, als ich direkt das Skript zu starten, aber nicht, wenn dieses Skript beim Herunterfahren (Skript installiert in Runlevel 0 und 6 über update-rc.d) aufgerufen wird

Irgendeine Idee, Vorschlag?

Danke

+1

Meine Vermutung ist, dass Ihr Init-System '/ bin/bash' nicht als Interpreter verwendet, stattdessen wird'/bin/sh' verwendet. –

+0

Wenn Williams Antwort funktioniert, vergessen Sie nicht, auf die Schaltfläche "Antwort annehmen" zu klicken! – dbr

Antwort

2

Zitieren Sie immer Zeichenfolgen.

Um zu überprüfen, ob die Zeichenfolge $ date_alarm einen Stern enthält, können Sie tun:

 
if echo x"$date_alarm" | grep '*' > /dev/null; then 
    ... 
fi 
+0

Funktioniert sehr vielen Dank – voidAndAny

0

was, wenn Sie

if [[ $date_alarm =~ .*\*.* ]] 

mit

if [[ "$date_alarm" =~ .*\*.* ]] 

Sie auch ersetzen passiert wollen könnte zu versuchen:

if [[ "$date_alarm" =~ '\*+' ]] 

nicht sicher, dass man ...

Grüße

+0

wenn [["$ date_alarm" = ~. * \ *. *]] Funktioniert nicht, aber wie gesagt, das seltsame ist, dass es nicht nur in init Kontext während funktioniert Abschaltung if [[ "$ date_alarm" = ~ '\ * +']] nicht tahnks – voidAndAny

+0

Zitat des Muster getestet: if [[ "$ date_alarm" = ~] "* \ *. *."] – bstpierre

0
if echo $date_alarm|perl -e '$_=<>;exit(!/\*/)' 
then 
    ... 
fi 
1
case "$date_alarm" in 
*\**) 
    ... 
    break 
    ;; 
*) 
    # else part 
    ... 
    ;; 
esac 

Die Syntax ist, na ja,/bin/sh, aber es funktioniert.

0

Schließlich

if echo x"$date_alarm" | grep '*' > /dev/null; then 

hat den Trick

Merkwürdig = ~. *. funktioniert nicht nur in init Kontext während des Abschaltens, aber perfekt funktionieren, wenn Start in bash Kontext ....

+0

Sie müssen kein externes Programm wie grep aufrufen, um das zu tun, was Sie wollen. In bash sollte die case-Anweisung genügen. – ghostdog74

2
expr "$date_alarm" : ".*\*.*" 
+1

ein bisschen Erklärung wäre nett;) – MUG4N

0

Keine Notwendigkeit stdout zu umleiten wie es andere tun. Verwenden Sie stattdessen die Option -q von grep:

wenn echo x "$ date_alarm" | grep -q '*'; dann

Verwandte Themen