2013-03-27 9 views
22

W jaki sposób należy to zmienić, aby sprawdzić, czy val ma parzystą lub nieparzystą wartość liczbową?Jak sprawdzić, czy zmienna ma parzystą (nieparzystą) wartość liczbową w bash?

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

Co chcesz sprawdzić? – fedorqui

+0

Potrzebuję tego, aby była to poprawna instrukcja warunkowa, aby sprawdzić, czy zmienna losowa jest równa. Teraz po prostu mówi: "0: command not found" – lizarisk

+0

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

Odpowiedz

40
$ a=4 

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

$ a=3 

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

Nauczyłem się czegoś nowego dzięki logicznym poleceniom AND i echo. Dzięki. – shparekh

9

$((...)) jest tylko wyrazem. Jego wynik pojawia się tam, gdzie bash oczekuje polecenia.

rozwiązanie

POSIX kompatybilny byłoby:

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

ale ponieważ RANDOM nie jest zdefiniowane w POSIX albo, można również użyć polecenia prawo bash dla zadania: arytmetyczna komenda związek ocena:

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

To jest dziwne (tj. Trudne do odczytania), że 'if ((RANDOM% 2)); wtedy "będzie prawdziwe, gdy RANDOM NIE jest wielokrotnością 2 ... –

+0

Jest to ten sam idiom powszechnie używany w innych językach. C miałoby 'if (random/2) {...}'. Python miałby 'if random/2: ...'. – chepner

24
foo=6 

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

To rozwiązało mój problem. – shparekh

Powiązane problemy