2009-11-02 10 views
6

tôi đang thử nghiệm với các shell script dưới đây:chuỗi So sánh bình đẳng trong ksh

#!/bin/ksh -x 


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

Nó đem lại cho lỗi này trong điều kiện if:

: ==: unknown test operator 

== thực sự không phải là cú pháp đúng để sử dụng ? Tôi đang chạy trên dòng lệnh như bên dưới

test_lsn_2 INSTANCE=ALL 

Ai cũng có thể đề xuất giải pháp. Cảm ơn.

+1

Đặt dấu ngoặc kép quanh ''$ instance'' trong' if' và thử lại. Hãy cho tôi biết nếu công việc đó. – NawaMan

+0

KHÔNG đặt dấu ngoặc kép xung quanh '$ instance' không hoạt động: ( – Vijay

+0

Phiên bản nào của 'ksh' là như thế này? –

Trả lời

5

Tôi thấy rằng bạn đang sử dụng ksh, nhưng bạn thêm bash như một thẻ, bạn có chấp nhận một câu trả lời bash liên quan? Sử dụng bash bạn có thể làm điều đó trong các cách sau:

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

Xem here để biết thêm về điều đó.

+0

cảm ơn cho trả lời monte. Asrereer nói == is not working = is working.i sẽ chấp nhận câu trả lời ur nhưng cũng 1 cho andre – Vijay

+0

Tôi nghĩ rằng tùy chọn thứ ba không phải là một ý tưởng tốt AFAIK, -eq là để so sánh số nguyên, chứ không phải là chuỗi – Daniel

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

Để so sánh các chuỗi bạn cần một đơn =, không phải là gấp đôi. Và bạn nên đặt nó trong dấu ngoặc kép trong trường hợp chuỗi trống:

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

cảm ơn andre cho đề xuất của bạn – Vijay

0

I'va đã trả lời một câu hỏi tương tự. Về cơ bản, toán tử bạn cần là = (không phải ==) và cú pháp sẽ bị hỏng nếu biến của bạn trống (tức là biến trở thành if [ = ALL]). Hãy xem the other answer để biết chi tiết.

4

Hãy thử

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

Có một vài sai lầm:

  1. Bạn cần dấu ngoặc kép quanh biến để bảo vệ chống lại (không) trường hợp đó nó trống rỗng. Trong trường hợp này, vỏ sẽ thấy if [ = "ALL" ]; then không hợp lệ.

  2. Bằng trong vỏ sử dụng một đơn = (không có cách nào để gán giá trị trong một vỏ if trong vỏ).