it-swarm.com.de

Wie mache ich, wenn die Anweisung in Bash arithmetisch ist?

Ich möchte so etwas machen:

if [ $1 % 4 == 0 ]; then
...

Das geht aber nicht.

Was muss ich stattdessen tun?

57
jmasterx
read n
if ! ((n % 4)); then
    echo "$n divisible by 4."
fi

Der Operator (( )) Wertet Ausdrücke als C-Arithmetik aus und hat eine boolesche Rückgabe.

Daher ist (( 0 )) Falsch und (( 1 )) Ist wahr. [1]

Der Operator $(( )) erweitert auch C-arithmetische Ausdrücke, gibt jedoch statt true/false den Wert zurück. Aus diesem Grund können Sie die Ausgabe testen, wenn $(( )) folgendermaßen vorgeht: [2]

[[ $(( n % 4 )) == 0 ]]

Dies ist jedoch gleichbedeutend mit: if (function() == false). Somit ist der einfachere und idiomatischere Test:

! (( n % 4 ))

[1]: Modern bash verarbeitet Zahlen bis zur Größe Ihres Computers intmax_t.

[2]: Beachten Sie, dass Sie $ Innerhalb von (( )) Ablegen können, da Variablen darin dereferenziert werden.

107
guns

einzelne Klammern ([..]) funktioniert bei einigen Tests nicht, versuche es mit doppelten Klammern ([[...]]) und lege den Mod in ((..)) zur Auswertung der % Operator richtig:

if [[ $(( $1 % 4 )) == 0 ]]; then

Weitere Details hier:
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_02.html

9
chown
a=4
if [ $(( $a % 4 )) -eq 0 ]; then                                
     echo "I'm here"
fi
9
Jan Vorcak

Das könnte für Sie funktionieren:

((a%4==0)) && echo "$a is divisible by 4" || echo "$a is not divisible by 4"

oder prägnanter:

((a%4)) && echo "$a is not divisible by 4" || echo "$a is divisible by 4"
3
potong