2016-08-08 4 views
-1

Wir haben einen Server, auf dem Selenium-Tests mit unserer Erweiterung (für Chrome und Firefox) ausgeführt werden. Wir führen die Selenium-Tests alle 2 Stunden durch. Ich möchte nach 14:00 verschiedene Tests durchführen als vor 14:00. Ich habe diese Variable:Wie kann ich die Stunde mit einer Zeichenfolge/Zahl in bash vergleichen?

start_hour=`TZ='Asia/Tel_Aviv' date +"%H"` 

Und ich weiß, wie es zu einer bestimmten Stunde zu vergleichen, wie 08.00 Uhr (es ist ein String):

if [ "$start_hour" = "08" ]; then 
    ... 
fi 

Aber wie kann ich überprüfen, ob diese Variable zeigt eine Stunde nach 14:00 (einschließlich 14:00) oder vor 14:00? Kann ich Strings in bash vergleichen und wie? Ich möchte nur überprüfen, ob $start_hour> = "14" ist, oder nicht?

Ist die Antwort anders, wenn ich nach 08:00 Uhr oder früher überprüfen möchte?

+0

es gibt keinen Grund, die 8 zu zitieren - eine konstante ist, so wird nie pron sein e zu string-splitting und glob expansion (die quoting verhindert). Was du zitieren solltest, sind deine variablen Erweiterungen; also, "$ start_hour" ', nicht $ start_hour. –

+0

BTW, du willst wahrscheinlich keine führende '0' in deiner '08'. Dies kann eine oktale Interpretation anfordern, und nur die Ziffern 0-7 können als oktal analysiert werden. –

+0

Ich würde in Betracht ziehen, diese Frage zu verallgemeinern, um über größere/weniger als numerische Ganzzahlvergleiche in bash im Allgemeinen zu sprechen - es gibt keinen Grund, es speziell über Stunden zu machen. –

Antwort

3

größer oder auszuführen weniger als Vergleiche, die test Operationen -gt, -le, -ge und -le existieren.

start_hour=$(TZ='Asia/Tel_Aviv' date '+%k') 
[ "$start_hour" -ge 8 ] 

Beachten Sie die Verwendung von %k vs %H und 8 vs 08 - a 0 führen Sie Ihre Zahlen verhindern kann, als Dezimalzahl interpretiert wird.

Auch in nativen bash Syntax für einen numerischen Vergleich:

start_hour=$(TZ='Asia/Tel_Aviv' date '+%k') 
((start_hour >= 8)) 

Wenn die Shell bash ist, und nicht/bin/sh, und Sie tun wirklich eine ASCII-Art wollen String-Vergleich können Sie > und < innerhalb von [[ ]] verwenden:

start_hour=$(TZ='Asia/Tel_Aviv' date '+%H') 
[[ $start_hour > 08 || $start_hour = 08 ]] 
+0

Beachten Sie, dass $ start_hour immer 2 Ziffern ist. Wenn die Stunde 08:00 Uhr ist, dann ist es "08". – Uri

+0

@Uri, ja, aber '08' ** ist keine gültige Zahl **, weil die führende 0 es als Oktal analysiert. Wenn Sie also "08" vergleichen möchten, müssen Sie dies als String und nicht als Zahl tun. –

+0

Danke, ich werde versuchen, Sie wissen zu lassen, ob es funktioniert. Es macht mir nichts aus, Strings oder Zahlen zu vergleichen, das macht nichts, weil 2-stellige Strings immer dasselbe sind wie die Zahlen. – Uri

Verwandte Themen