Арифметические бинарные операторы-gt, - Это дает ошибку, но работу в сценарии оболочки

Я записал этот простой сценарий, он работает также, но показывает ошибку

clear
echo Enter 1st number
read n1
echo Enter 2nd number
read n2
echo MUlti is `expr $n1 \* $n2`;
if [$n1 -lt $n2]
then
 echo $n1 'is bigger than' $n2
else
 echo $n2 'is bigger than' $n1
fi

вывод

Enter 1st number
5
Enter 2nd number
10
MUlti is 50
./script.sh: line 7: [5: command not found
10 is bigger than 5
2
задан 19 August 2011 в 20:25

2 ответа

[ встроенная команда, также известная как test, и как все команды требует, чтобы, по крайней мере, пространство разделило его от других слов в команде. [ также доступно как регулярная команда в /usr/bin/[ или /usr/bin/test.

Присутствие финала ] вместо этого требование команды при вызове как [, и пробелы вокруг этого требуются что касается каждого параметра команды.

Тем не менее в ударе необходимо использовать команду [[, это имеет некоторый avantages [, как, например, поддержка && и || для логических операций, около -a и -o.

Кроме того, чтобы сделать целочисленные арифметические операции и сравнение между целыми числами лучше использовать арифметические расширения $((math operations)), и соответствующая команда ((math ops)).

С этими наблюдениями Ваш сценарий мог быть:

#!/bin/bash

clear
echo "Enter 1st number"
read n1
echo "Enter 2nd number"
read n2
echo "Multi is $((n1 * n2))"
if ((n1 > n2)); then
  echo "$n1 is bigger than $n2"
else
  echo "$n2 is bigger than $n1"
fi

Не забудьте делать это исполняемым файлом (chmod +x my-script), затем выполните его с ./my-script.

9
ответ дан 2 December 2019 в 01:25

Для условного выражения удара, если операторы, необходимо иметь пробельное право прежде и прямо после условия. Ваш должен быть похожим:

if [ $n1 -lt $n2 ]

вместо

if [$n1 -lt $n2]

Глупо, но это - оболочка удара.

5
ответ дан 2 December 2019 в 01:25

Другие вопросы по тегам:

Похожие вопросы: