2013-03-27 11 views
22

Wie sollte ich dies ändern, um zu prüfen, ob val einen geraden oder ungeraden numerischen Wert hat?Wie überprüfe ich, ob eine Variable einen geraden (nicht ungeraden) numerischen Wert in bash hat?

val=2 
if $((RANDOM % $val)); ... 
+0

Was möchten Sie überprüfen? – fedorqui

+0

Ich brauche dies eine korrekte bedingte Anweisung zu überprüfen, ob die Zufallsvariable gerade ist. Jetzt heißt es nur noch: "0: Befehl nicht gefunden" – lizarisk

+0

So? http://stackoverflow.com/questions/3601515/how-to-check-if-a-variable-is-set-in-bash –

Antwort

40
$ a=4 

$ [ $((a%2)) -eq 0 ] && echo "even" 
even 

$ a=3 

$ [ $((a%2)) -eq 0 ] && echo "even" 
+1

Mit dem logischen Befehl AND und echo wurde etwas neues gelernt. Danke. – shparekh

9

$((...)) ist nur ein Ausdruck. Das Ergebnis wird angezeigt, wenn bash einen Befehl erwartet.

Eine POSIX-kompatible Lösung wäre:

if [ "$((RANDOM % 2))" -ne 0 ]; 

aber da RANDOM auch nicht in POSIX definiert ist, man kann auch das Recht bash Befehl für den Job verwenden: eine arithmetische Auswertung Verbindung Befehl:

if ((RANDOM % 2)); then 
+0

es ist komisch (dh schwer zu lesen), dass das 'if ((RANDOM% 2)); then 'wird wahr, wenn RANDOM kein Vielfaches von 2 ist ... –

+0

Dies ist das gleiche Idiom, das in anderen Sprachen häufig verwendet wird. C hätte 'if (random/2) {...}'. Python hätte 'falls random/2: ...'. – chepner

24
foo=6 

if [ $((foo%2)) -eq 0 ]; 
then 
    echo "even"; 
else 
    echo "odd"; 
fi 
+0

Das hat mein Problem gelöst. – shparekh

Verwandte Themen