Вопрос

Я тестирую с помощью скрипта оболочки ниже:

#!/bin/ksh -x


instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi

Это дает эту ошибку в условии if:

: ==: unknown test operator

является == На самом деле не правильный синтаксис для использования? Я работаю в командной строке, как ниже

test_lsn_2 INSTANCE=ALL

Может ли кто -нибудь, пожалуйста, предложить решение. Спасибо.

Это было полезно?

Решение

Я вижу, что вы используете KSH, но вы добавили Bash в качестве тега, принимаете ли вы ответ, связанный с Bash? Используя Bash, вы можете сделать это таким образом:

if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]

Видеть здесь Для получения дополнительной информации об этом.

Другие советы

Для сравнения строк вам нужен один = не двойник. И вы должны поместить его в двойные кавычки на случай, если строка пуста:

if [ "$instance" = "ALL" ]
then
    echo "strings matched \n"
fi

Пытаться

if [ "$instance" = "ALL" ]; then

Было несколько ошибок:

  1. Вам нужны двойные цитаты вокруг переменной, чтобы защитить от (маловероятного) случая, что она пуста. В этом случае оболочка увидит if [ = "ALL" ]; then что недопустимо.

  2. Равно в оболочке используется один = (нет способа назначить значение в if в оболочке).

totest=$1
case "$totest" in
  "ALL" ) echo "ok" ;;
  * ) echo "not ok" ;;
esac

Я уже ответил на аналогичный вопрос. В основном необходимый оператор, который вам нужен = (нет ==) и синтаксис ломается, если ваша переменная пуста (т.е. if [ = ALL]) Посмотри на другой ответ Для деталей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top