Computer >> Hướng Dẫn Máy Tính >  >> Xử Lý Sự Cố >> Lỗi Windows

Cách khắc phục lỗi Syntax Error near unexpected token `(‘

Thông báo lỗi syntax error near unexpected token `(‘ xảy ra trong môi trường loại Unix, Cygwin và giao diện dòng lệnh trong Windows. Lỗi này sẽ có khả năng lớn được kích hoạt khi bạn cố gắng chạy một shell script được chỉnh sửa hoặc tạo trong các hệ thống DOS/Windows hoặc Mac cũ hơn.

Cách khắc phục lỗi Syntax Error near unexpected token `(‘

Thông báo lỗi này cũng xuất hiện khi bạn nhập lệnh trong dòng lệnh Linux cho các tác vụ hàng ngày như sao chép tệp thủ công v.v. Lý do chính tại sao thông báo lỗi này xảy ra là do cú pháp xấu hoặc vấn đề của hệ điều hành trong việc giải thích các lệnh/shell của hệ thống khác.

Nguyên nhân gây ra Syntax Error near unexpected token `(‘?

Các lý do cho thông báo lỗi này rất đa dạng và không thể liệt kê trong một bài viết vì có hàng nghìn khả năng cú pháp sai khi thực thi lệnh. Các nguyên nhân cốt lõi cho lỗi này là:

  • Cú pháp xấu khi thực thi bất kỳ lệnh nào trong một trong hai nền tảng. Hoặc bạn không sử dụng lệnh đúng cách hoặc đã nhập cú pháp sai.
  • Shell không tương thích giữa các hệ thống Unix/DOS.
  • Có vấn đề khi chạy bash shell script từ nguồn khác.

Trong bài viết này, chúng tôi giả định rằng bạn biết kiến thức cơ bản về lập trình và có ý định về những gì bạn đang làm. Nếu bạn là người mới bắt đầu, tốt nhất bạn nên làm theo các hướng dẫn chuyên sâu của ngôn ngữ/lệnh mà bạn đang cố gắng thực thi. Bạn có thể đã mắc lỗi cú pháp nào đó.

Giải pháp 1: Kiểm tra Cú pháp và Định dạng Lệnh

Lý do đầu tiên và quan trọng nhất tại sao bạn có thể gặp thông báo lỗi này là do cú pháp xấu trong mã của bạn hoặc bạn không tuân theo đúng định dạng của các lệnh. Mỗi lệnh có một định dạng được xác định trước mà bạn có thể thấy trong tài liệu của nó. Một số tham số là tùy chọn trong khi những tham số khác là bắt buộc.

Hơn nữa, cần cẩn thận đặc biệt đối với khoảng trắng thừa, sử dụng ngoặc kép và các tham số bắt buộc được yêu cầu. Nếu bất kỳ thứ nào trong số đó bị thiếu hoặc được khai báo không chính xác, bạn sẽ không thể thực thi mã của mình.

Ví dụ, thay vì mã sau:

[mycom7] # ./ctopo.sh um_test1 [(1,2),(2,1)]

Bạn cần thực thi nó như:

[mycom7] # ./ctopo.sh um_test1 "[(1,2),(2,1)]"

Cũng hãy đảm bảo rằng bạn đang thực thi đúng các lệnh/shell script của mình nếu nó trải dài nhiều dòng.

Do loại tham số, dấu ngoặc kép là cần thiết. Một khoảng trắng thừa cũng có thể làm hỏng mã của bạn và buộc thông báo lỗi. Hãy đảm bảo bạn kiểm tra tài liệu chính thức của lệnh bạn đang thực thi và xem có vấn đề gì ở đó không.

Giải pháp 2: Khắc phục sự cố Shell Script

Nếu bạn đang sử dụng một shell script hoạt động trong hệ thống nguồn nhưng trả về lỗi trong hệ thống đích, bạn có thể khắc phục sự cố script bằng cách kiểm tra các biến được lưu trữ trong quá trình thực thi và sau đó xem điều gì đang gây ra vấn đề. Đây là nguyên nhân rất phổ biến vì trong một số trường hợp, shell cố gắng giải thích một ký tự không in được.

Thử chạy shell với tham số 'vx'. Điều này sẽ cho chúng ta thấy những lệnh nào đang được chạy và những giá trị nào được lưu trữ trong script. Thông qua đây bạn có thể khắc phục sự cố và chẩn đoán điều gì đang sai.

Ví dụ, thực thi script trong terminal sau khi bao gồm 'vx' như:

# sh -vx ./test_script5.sh

Bạn có thể kiểm tra nội dung của script bằng lệnh 'cat' như:

# cat test_script5.sh

Giải pháp 3: Sử dụng lệnh 'dos2unix.exe'

Trong các tệp văn bản Windows/DOS, một dòng mới là sự kết hợp của Carriage Return (\r) theo sau là Line Feed (\n). Trong Mac (trước Mac OS X), ngắt dòng sử dụng Carriage Return (\r) đơn giản. Unix/Linux và Mac OS X sử dụng Line Feed (\n) để ngắt dòng. Nếu bạn đang sử dụng Cygwin, nó sẽ không thể xử lý các script do DOS/Windows và Mac cũ tạo ra do ký tự Carriage Return (\r) thừa.

Cách khắc phục lỗi Syntax Error near unexpected token `(‘

Ở đây bạn có thể sử dụng lệnh 'dos2unix.exe' sẽ chuyển đổi script sang định dạng đúng và sau đó bạn có thể thực thi nó mà không gặp vấn đề gì.

Tóm lại, bạn cần nghiên cứu các lệnh và loại nền tảng bạn đang sử dụng và đảm bảo không có sự khác biệt nào. Vì chúng tôi không thể bao phủ từng khả năng, bạn sẽ có ý tưởng về những loại lỗi nào có thể xảy ra và cách khắc phục chúng.