2012-12-19 33 views
5

Xin chào, tôi là người mới bắt đầu viết kịch bản. Chỉ cần viết chương trình đơn giản này nhưng nó là ném lỗi.So sánh chuỗi trong bash không hoạt động

#!/bin/bash 
os=`uname -o` 
echo $os 
if ["$os"=="GNU/Linux"] ; then 
    echo "Linux" 
else 
    echo "Windows" 
fi 

Sử dụng == hoặc -eq cho cả hai trường hợp Tôi nhận được lỗi sau và đang in lệnh khác.

./ostype.sh: dòng 3: [GNU/Linux == GNU/Linux]: Không có tập tin hoặc thư mục

của Windows

phiên bản Bash: GNU bash, phiên bản 3.2 .48 (1) -release (x86_64-suse-linux-gnu)

+0

Câu hỏi này đã được trả lời, hãy xem liên kết này [1] [1]: http://stackoverflow.com/questions/394230/detect-the-os-from-a-bash-script – mana

+0

Với khoảng cách thích hợp '=' và '==' cả hai đều làm việc để so sánh các chuỗi. '-eq' là một số nguyên so sánh. – Hennes

Trả lời

17

thử

if [ "$os" = "GNU/Linux" ] 

lưu ý các không gian, và các đơn =.

[ thực sự là một chương trình và phần còn lại là đối số!

+1

+1 cho '[thực sự là một chương trình, và phần còn lại là đối số!' .. Nhiều người không biết điều đó. Thậm chí tôi không biết vài tháng trước. :-) – anishsane

+0

và cho tất cả các ý định và mục đích bạn có thể muốn sử dụng nội trang hệ vỏ [[', có lẽ nhanh hơn. – yiding

+1

Oh ... Tôi nghĩ, '[' cũng bị ghi đè bởi trình bao tích hợp sẵn. giống như '[[' & 'echo' ... – anishsane

5

Sử dụng = để so sánh chuỗi. Xem: http://tldp.org/LDP/abs/html/comparison-ops.html

Ngoài ra, cần có một không gian xung quanh dấu ngoặc vuông và các nhà điều hành so sánh, ví dụ:

if [ "$os" = "GNU/Linux" ]; then 
^^ ^^   ^ 
    | |  | |   | 
    \-\-----\-\-----------\-- (need spaces here) 
+0

Không! lỗi tương tự đang ném – Reuben

+0

@Reuben lưu ý không gian chỉnh sửa lại. –

+0

đã nhận được :) cảm ơn! – Reuben

Các vấn đề liên quan