Исключение при запуске простого скрипта sh

Ниже приведен простой скрипт, при запуске скрипта я получаю исключение, подобное строке 10: синтаксическая ошибка: неожиданный конец файла. пожалуйста, помогите.

#!/bin/sh
a=10
b=20
if [ 10 == 20 ]
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi
0
задан 11 May 2018 в 10:22

2 ответа

изменение == кому: -eq:

#!/bin/sh
a=10
b=20
if [ 10 -eq 20 ]
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi

BTW: Вы установили переменные a и b, но Вы не используете их. Я предполагаю, что Вы предназначили:

#!/bin/sh
a=10
b=20
if [ $a -eq $b ]
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi

Посмотрите man test поскольку, что выражение в [ ] похож. = для сравнений строк, -eq, -gt, и т.д. для целочисленных сравнений.

3
ответ дан 29 October 2019 в 09:05

Во-первых, я верю [ 10 == 20 ] опечатка, и это должно быть [ "$a" == "$b" ]. Второй @dsstorefile1 является правильным В POSIX sh, == не поддерживается.

Если Вы используете shellcheck можно найти это сами:

$ shellcheck script.sh 

In script.sh line 4:
if [ "$a" == "$b" ]
          ^-- SC2039: In POSIX sh, == is not supported.

Вот немного усовершенствованная версия Вашего сценария, который мог обработать первые два позиционных параметра:

#!/bin/sh
a="$1"
b="$2"
if [ "$a" = "$b" ]
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi

Затем можно использовать его таким образом:

$ ./script.sh 10 20
a is not equal to b

$ ./script.sh 10 10
a is equal to b
2
ответ дан 29 October 2019 в 09:05

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

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