Я изучаю сценарии Shell для получения диплома в области ИТ, которым я сейчас занимаюсь. Я пытаюсь написать небольшой скрипт, который добавляет два числа, как показано в одном из учебных пособий, которые нам дали.
echo "Enter two numbers"
read num1 num2
sum = 'expr $num1 + $num2'
echo "The sum is = $sum"
Однако, когда я даю ему разрешение на выполнение и запускаю скрипт, он выдает мне эту ошибку.
sum: =. No such file or directory.
sum: expr $num1 + $num2: No such file or directory
Я попытался запустить это на Ubuntu и Fedora, но возникает та же ошибка. Может кто-нибудь сказать мне, что мне здесь не хватает?
shell-script
Isuru
источник
источник
Ответы:
Сначала вы должны избавиться от мест для назначения, например,
то вы должны изменить
'
к`
или даже лучше$()
:вместо использования
expr
вы также можете сделать расчет прямо в вашей оболочке:источник
expr
вместо этого$((...))
- желание быть переносимым на классическую оболочку Bourne, то также стоит избегать этого$(...)
.$()
? Насколько я знаю, это требуется по posix, например, все оболочки, совместимые с posix, должны поддерживать$()
$(…)
, но она почти вымерла (возможно, кто-то где-то еще работает/bin/sh
на Solaris).$(…)
- или, по крайней мере, не все версии.Возможно, вы неправильно прочитали обратные пометки в виде одинарных кавычек в строке:
Смотрите вики Грега по использованию
$(...)
вместо этого.Это работает как ожидалось:
Также обратите внимание, что вокруг знака равенства нет пробелов (присвоение переменной).
источник
expr
это внешняя программа, используемая оболочкой Bourne (т.е. sh) У оболочки Борна изначально не было никакого механизма для выполнения простой арифметики. Он используетexpr
внешнюю программу с помощью backtick.Обратный удар ( ` ) на самом деле называется подстановкой команд. Подстановка команд - это механизм, с помощью которого оболочка выполняет заданный набор команд, а затем заменяет их вывод вместо команд.
В bash (bourne again shell) он имеет следующий системный синтаксис, он не использует внешнюю программу
expr
.если мы хотим использовать внешнюю программу
expr
. у нас есть следующий систакс:источник
Если вы используете bash, вы можете просто сделать что-то вроде этого:
источник
источник
источник
Вы можете использовать один обратный удар ( `ключ)
источник
$( ... )
вместо снарядов. Кроме того, проблема в том, что OP использует пробелы там, где их не должно быть.источник
источник