2009-11-02 2 views
6

я тестирование с помощью сценария оболочки ниже:Сравнивая строки для равенства в KSH

#!/bin/ksh -x 


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

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

: ==: unknown test operator 

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

test_lsn_2 INSTANCE=ALL 

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

+1

Поместите двойные кавычки вокруг '' $ instance' 'в 'if' и попробуйте еще раз. Дайте мне знать, если эта работа. – NawaMan

+0

NO put двойные кавычки вокруг '$ instance' does not work :( – Vijay

+0

Какая версия 'ksh' была такой? –

ответ

5

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

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

См here более подробно об этом.

+0

спасибо за ответ monte. As andre miller said == is not working = is work.i примет ур ответ, но также +1 для andre – Vijay

+0

Я думаю, что третий вариант - не очень хорошая идея. AFAIK, -eq для целых сравнений, а не строк. – Daniel

15

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

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

благодарит andre за ваше предложение – Vijay

0

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

4

Попробуйте

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

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

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

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