Сценарий оболочки Ubuntu дает неправильный вывод

Я пытаюсь изучить основы сценариев оболочки, когда запускаю следующий код, мой терминал возвращает «Ни одно из условий не выполнено», но когда я запускаю его на онлайн-оболочка Я получаю "a равно b" может ли кто-нибудь объяснить причину этого.

Источник:

#!/bin/sh

a=10
b=10

if [ $a == $b ]
then
   echo "a is equal to b"
else
   echo "None of the condition met"
fi

Скриншот:
введите здесь описание изображения


person Shashank K    schedule 16.12.2015    source источник


Ответы (3)


Ubuntu /bin/sh — это тире. Вы могли бы сделать что-то вроде,

#!/bin/sh

a=10
b=10

if [ "$a" -eq "$b" ]
then
   echo "a is equal to b"
else
   echo "None of the condition met"
fi
person Elliott Frisch    schedule 16.12.2015

Оператор == не является переносимым, и очевидно, что оболочка, которую вы установили как /bin/sh, использует встроенную версию [, которая не распознает этот оператор. Просто замените его на =.

person William Pursell    schedule 16.12.2015

sh(1) в ubuntu — это символьная ссылка на dash(1):

$ which sh | xargs ls -l
lrwxrwxrwx 1 root root 4 Jan 20 2015 /bin/sh -> dash

согласно его справочной странице, в test(1) или [ нет оператора ==. == — это расширенный оператор для bash(1).

Есть два способа изменить:

  • если вы хотите сравнить два целых числа, используйте '-eq' вместо этого
  • если вы хотите сравнить две строки, используйте вместо них '='.

И оба способа совместимы с posix.

person oxnz    schedule 16.12.2015