Я записал этот простой сценарий, он работает также, но показывает ошибку
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
[
встроенная команда, также известная как 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
.
Для условного выражения удара, если операторы, необходимо иметь пробельное право прежде и прямо после условия. Ваш должен быть похожим:
if [ $n1 -lt $n2 ]
вместо
if [$n1 -lt $n2]
Глупо, но это - оболочка удара.