Добро пожаловать, Роджер. Можете ли вы обернуть код вашего вопроса в теги кода (или использовать кнопку кода в редакторе)? Это делает вещи намного проще для чтения.
Телемах
Ответы:
39
Вы можете использовать более простой синтаксис в Bash, чем некоторые другие, показанные здесь:
#!/bin/bash
read -p "Enter a number " number # read can output the prompt for you.if(( $number %5==0))# no need for bracketsthen
echo "Your number is divisible by 5"else
echo "Your number is not divisible by 5"fi
Приостановлено до дальнейшего уведомления. источник
Благодарность! я знал, что должен быть более простой путь, но мне не повезло. Сценарии bash всегда были для меня чем-то вроде чёрного искусства.
Квик-кихот
Это приведет к появлению сообщения об ошибке "((:: 08: слишком большое значение для базы (токен ошибки" 08 ")" и "((:: 09: слишком большое значение для базы (токен ошибки" 09 ")" см. ubuntuforums.org/showthread.php?t=677751 для объяснения
Красный Крикет
@RedCricket: только если вы введете ведущий ноль. Если это проблема, вы можете сделать следующее: if (( 10#$number % 5 == 0 ))заставить $numberинтерпретироваться как основание 10 (вместо основания 8 / восьмеричное значение, подразумеваемое начальным нулем).
Приостановлено до дальнейшего уведомления.
@Deniis Williamson Да, это более точно. Благодарность! :)
Красный Крикет
11
Нет необходимости в bc, если это целочисленная математика (хотя для плавающей запятой вам понадобится bc): В bash оператор (()) работает как expr .
Как уже отмечали другие, вы хотите выполнить операцию по модулю (%) .
#!/bin/bash
echo "Enter a number"
read number
if[ $(( $number %5))-eq 0];then
echo "Your number is divisible by 5"else
echo "Your number is not divisible by 5"fi
!/usr/bin/bash
echo “Enter a number”
read number
echo “Enter divisor”
read divisor
remainder=`echo "${number}%${divisor}" | bc`
echo "Remainder: $remainder"if["$remainder"=="0"];then
echo “Your number is divisible by $divisor”else
echo “Your number is not divisible by $divisor”fi
В качестве альтернативы вы можете использовать expr вместо bc: remainder =expr $number % $divisor
Дэн Дайер
@ Дан Да, этого должно хватить для ОП. Тем не менее, я думаю, так как он bcспециализируется на вычислениях, он может обрабатывать такие вещи, как 33,3% 11,1, которые expr, вероятно, задохнутся.
Нагуль
определенно задохнется; expr и (()) обрабатывают только целочисленную математику.
Квик-кихот
3
Ответ Нагула великолепен, но, к вашему сведению, операция, которую вы хотите, - это модуль (или модуль), а оператор в целом %.
В интересах нейтральности синтаксиса и исправления предвзятого представления инфиксных обозначений вокруг этих частей, я изменил решение nagul для использования dc.
!/usr/bin/bash
echo “Enter a number”
read number
echo “Enter divisor”
read divisor
remainder=$(echo "${number} ${divisor}%p"| dc)
echo "Remainder: $remainder"if["$remainder"=="0"]then
echo “Your number is divisible by $divisor”else
echo “Your number is not divisible by $divisor”fi
Я понимаю, что это действительно старый вопрос, но у меня есть вопрос о коде. Я относительно новичок в bash и просто попытался запустить этот скрипт. Однако это дает мне несколько ошибок, и я, честно говоря, не знаю почему. После ввода числа и делителя я получаю: test.sh: 7: test.sh: dc: не найден Остаток: test.sh: 10: [: неожиданный оператор «Ваш номер не делится на 2». У вас есть идея, почему ?
AreusAstarte
1
@AreusAstarte: Это означает, что вы не dcустановили.
Приостановлено до дальнейшего уведомления.
0
Вы также можете использовать exprтак:
#!/bin/sh
echo -n "Enter a number: "
read number
if[`expr $number % 5`-eq 0]then
echo "Your number is divisible by 5"else
echo "Your number is not divisible by 5"fi
Ответы:
Вы можете использовать более простой синтаксис в Bash, чем некоторые другие, показанные здесь:
источник
if (( 10#$number % 5 == 0 ))
заставить$number
интерпретироваться как основание 10 (вместо основания 8 / восьмеричное значение, подразумеваемое начальным нулем).Нет необходимости в bc, если это целочисленная математика (хотя для плавающей запятой вам понадобится bc): В bash оператор (()) работает как expr .
Как уже отмечали другие, вы хотите выполнить операцию по модулю (%) .
источник
Как насчет использования
bc
команды:источник
expr $number % $divisor
bc
специализируется на вычислениях, он может обрабатывать такие вещи, как 33,3% 11,1, которыеexpr
, вероятно, задохнутся.Ответ Нагула великолепен, но, к вашему сведению, операция, которую вы хотите, - это модуль (или модуль), а оператор в целом
%
.источник
Я сделал это по-другому. Проверьте, работает ли он для вас.
Пример 1:
Пример 2:
Простая логика.
12/3 = 4
4 * 3 = 12 -> тот же номер
11/3 = 3
3 * 3 = 9 -> не тот же номер
источник
В интересах нейтральности синтаксиса и исправления предвзятого представления инфиксных обозначений вокруг этих частей, я изменил решение nagul для использования
dc
.источник
dc
установили.Вы также можете использовать
expr
так:источник