Подтвердить что ты не робот

Как мне сделать, если арифметика оператора в bash?

Я хочу сделать что-то вроде этого:

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

но это не работает. Что мне нужно сделать вместо этого?

Спасибо

4b9b3361

Ответ 1

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

Оператор (( )) оценивает выражения как арифметику C и имеет логическое возвращение.

Следовательно, (( 0 )) является ложным, а (( 1 )) является истинным. [1]

Оператор $(( )) также расширяет C арифметические выражения, но вместо того, чтобы возвращать true/false, он возвращает значение вместо этого. Из-за этого вы можете проверить результат, если $(( )) следующим образом: [2]

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

Но это равносильно: if (function() == false). Таким образом, более простой и более идиоматический тест:

! (( n % 4 ))

[1]: Современный bash обрабатывает номера до вашего размера intmax_t.

[2]: Обратите внимание, что вы можете отбросить $ внутри (( )), потому что в нем есть переменные разметки.

Ответ 2

одиночные скобки ([..]) не работают для некоторых тестов, попробуйте использовать двойные скобки ([[...]]) и приложите mod в ((..)), чтобы правильно оценить оператор %:

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

Подробнее здесь:
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_02.html

Ответ 3

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

Ответ 4

Это может сработать для вас:

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

или более лаконично:

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