it-roy-ru.com

Как сделать деление с переменными в оболочке Linux?

Когда я запускаю команды в своей командной консоли, как показано ниже, она возвращает ошибку expr: non-integer argument. Может кто-нибудь, пожалуйста, объясните мне это?

$ x=20
$ y=5
$ expr x / y 
expr: non-integer argument
99
Judking

Эти переменные являются переменными оболочки. Чтобы расширить их как параметры для другой программы ( т.е. expr), вам необходимо использовать префикс $:

expr $x / $y

Причина, по которой он жаловался, заключается в том, что он думал, что вы пытаетесь оперировать буквенными символами ( т.е. нецелое число)

Если вы используете Bash Shell, вы можете достичь того же результата, используя синтаксис выражения:

echo $((x / y))

Или же:

z=$((x / y))
echo $z
147
paddy

Я считаю, что это уже упоминалось в других темах:

calc(){ awk "BEGIN { print "$*" }"; }

тогда вы можете просто набрать:

calc 7.5/3.2
  2.34375

В вашем случае это будет:

x=20; y=3;
calc $x/$y

или, если хотите, добавьте его в виде отдельного сценария и сделайте его доступным в $ PATH, чтобы он всегда был в локальной оболочке:

#!/bin/bash
calc(){ awk "BEGIN { print $* }"; }
28
zielonys

Почему бы не использовать let; Я нахожу это намного проще .. Вот пример, который вы можете найти полезным:

start=`date +%s`
# ... do something that takes a while ...
sleep 71

end=`date +%s`
let deltatime=end-start
let hours=deltatime/3600
let minutes=(deltatime/60)%60
let seconds=deltatime%60
printf "Time spent: %d:%02d:%02d\n" $hours $minutes $seconds
19
user1985657

Ссылка на переменные Bash требует расширения параметров

Оболочкой по умолчанию в большинстве дистрибутивов Linux является Bash. В Bash переменные должны использовать префикс знака доллара для расширения параметра . Например:

x=20
y=5
expr $x / $y

Конечно, Bash также имеет арифметические операторы и специальный синтаксис арифметического расширения , поэтому нет необходимости вызывать двоичный файл expr как отдельный процесс. Вы можете позволить Shell делать всю работу следующим образом:

x=20; y=5
echo $((x / y))
15
Todd A. Jacobs

давайте предположим

x=50
y=5

затем

z=$((x/y))

это будет работать правильно. Но если вы хотите использовать/оператор в операторах case, он не может это решить.  enter code here В этом случае используйте простые строки, такие как div или devide или что-то еще. См код

0
Pooja Rajput