2012-02-24 53 views
9

Vấn đề là với mã này:Shell script với -l wc, câu lệnh if không hoạt động

words=`wc -l /home/tmp/logged.log | awk '{print $1}'`; 
    if [ $words == 26 ] 
    then 
    echo $words 
    echo Good 
    else 
    echo Not so good 
    fi 

nó luôn luôn trả về tuyên bố khác. Thậm chí tho kết quả là 26. Tôi cũng đã cố gắng

 words=`wc -l < /home/jonathan/tmp/logged.log`; 
+0

đặt cược của tôi là '$ words' có một dòng mới kết thúc' "26 \ n" '. –

+0

Để ngăn chặn 'wc' in tên tệp, hãy đọc từ stdin:' words = $ (wc -l

Trả lời

6

cố gắng sử dụng [ $words -eq 26 ] thay vì [ $words == 26 ]

hoặc [ 26 == 26 ] để kiểm tra tuyên bố rằng hoạt động đúng

+0

Cảm ơn sự giúp đỡ, tôi đã tìm thấy sự cố sau khi thử 26 == 26. Vấn đề là lastlog này | grep Không bao giờ | wc -l> /tmp/logged.log. Tệp nhật ký chứa 1 hàng có giá trị 26. – user1204032

+0

vui lòng! tuy nhiên bạn có thể sử dụng một số toán tử kiểu C trong bash bằng cách sử dụng expr [[26 == 26]] – triclosan

2

== là không hợp lệ. Sử dụng =

if [ $words = 26 ] 

Bằng cách này bạn có thể sử dụng cut thay vì awk.

wc -l /home/tmp/logged.log | cut -f1 -d" " 
+0

Ví dụ thứ hai của mình, wc -l jordanm

+0

Cảm ơn sự giúp đỡ, tôi đã tìm thấy vấn đề của riêng mình sau khi thử 26 == 26. Vấn đề là lastlog này | grep Không bao giờ | wc -l> /tmp/logged.log. Tệp nhật ký chứa 1 hàng có giá trị 26. – user1204032

1

Hãy thử điều này:

words=`wc -l /home/tmp/logged.log | awk '{print $1}'`; 
if test $words -eq 26; then 
    echo $words 
    echo Good 
else 
    echo Not so good 
fi 
Các vấn đề liên quan