Risposte:
Prima il [ comando fa solo confronti. Devi eseguire calcoli separatamente. Per esempio:
var1mod=$((var1 % 2))
if [ $var1mod -eq 0 ]; then
Tuttavia, dal momento che sembra che tu stia scrivendo il tuo script per bash, puoi usare un comando diverso ed evitare il passaggio aggiuntivo:
if (( var1 % 2 == 0 )); then
E in secondo luogo, non puoi concatenare i comandi con -a. Questo funziona solo come un argomento [. Ma fuori di esso, devi usare &&.
Tre diverse varianti:
if [ $var1mod -eq 0 -a $var2mod -eq 0 ]; then
if [ $var1mod -eq 0 ] && [ $var2mod -eq 0 ]; then
if (( var1 % 2 == 0 )) && (( var2 % 2 == 0 )); then
if (( var1 % 2 == 0 && var2 % 2 == 0 )); then
Ricorda sempre, la sintassi di if è un semplice if comando ; poi comando ; fi . Ciò significa che [ nel if [ è solo il nome di un comando come ls o echo.
Sembra che tu stia confondendo la valutazione condizionale con la valutazione aritmetica. % è un operatore nella valutazione aritmetica, non nella valutazione condizionale. Vedere il bash(1) sezioni della pagina man per questi argomenti. [...] è per valutazione condizionale, mentre ((...)) è per la valutazione aritmetica.
Per non parlare del fatto che la tua riga di shebang è sbagliata, a meno che per qualche ragione tu abbia installato una copia di bash al livello di root del tuo disco di avvio.
Ultimo ma non meno importante, una nuova riga è uguale a un punto e virgola. Non è necessario terminare una riga con un punto e virgola nello scripting della shell. Il punto e virgola esiste solo per consentire di inserire due istruzioni su una riga.
Ecco una versione ripulita del tuo script:
#!/bin/bash
VAR1=10
VAR2=20
if (( (VAR1 % 2 == 0) && (VAR2 % 5 == 0) )); then
: #something (colon is a no-op)
fi
-a ha due significati; EXPR -a EXPR è un AND logico.
%e%5sono argomenti validi per[?