Tin tức và phân tích của tất cả các thiết bị di động

Sửa lỗi cú pháp Bash gần mã thông báo không mong muốn

Mã hóa Linux Bash Terminal đã trở thành thông lệ thống trị trong lĩnh vực mã hóa. Các kỹ sư phần mềm và sinh viên học một ngôn ngữ viết mã gặp phải nhiều lỗi khác nhau. Nếu bạn đã nhiều lần gặp các lỗi như lỗi cú pháp gần mã thông báo không mong muốn “(” hoặc lỗi cú pháp Bash gần mã thông báo không mong muốn, bạn có thể thử dựa vào các phương pháp được mô tả trong bài viết và trở thành một lập trình viên thành thạo. Hãy đọc các phương pháp được mô tả trong bài viết theo thứ tự mô tả và sửa lỗi dòng lệnh trong file của bạn.

Làm cách nào để sửa lỗi cú pháp Bash gần mã thông báo không mong muốn?

Linux Bash là trình thông dịch dòng lệnh cho hệ thống dựa trên Linux và thay thế Bourne Shell hoặc sh. Các tệp được đặt tên bằng định dạng .sh trong tập lệnh Linux Bash. Nếu có vấn đề về định dạng trong mã trong tập lệnh shell, bạn có thể gặp phải lỗi cú pháp. Nếu lỗi gần bằng (, shell sẽ hỏi lỗi trên dòng và hiển thị lỗi trên dòng tương ứng. Vì Linux Bash là trình thông dịch nên dòng lỗi sẽ được trả về Terminal và nó sẽ ngừng quét phần còn lại của các lệnh trong tập lệnh. Do đó, bạn cần sửa lỗi trên các dòng lệnh cụ thể và chuyển sang lệnh tiếp theo để khắc phục lỗi mã thông báo không mong muốn trong tập lệnh shell. Nguyên nhân gây ra lỗi cú pháp gần mã thông báo không mong muốn trong Linux Bash được liệt kê dưới đây trong phần này như dưới đây:

  • Mã hóa với chuỗi thoát – Nếu mã được viết bằng tập lệnh Bash, chuỗi thoát hoặc dấu ngoặc kép trong tập lệnh có thể gây ra lỗi. Trình tự thoát và dấu ngoặc kép phải được viết ở định dạng chính xác để sửa lỗi.

  • Cú pháp sai trong tệp mã hóa – Cú pháp trong mã có thể gây ra lỗi cú pháp nếu lệnh được viết sai cú pháp, chẳng hạn như thay đổi thứ tự các vòng lặp.

  • Sử dụng sai lệnh – Nếu bạn không sử dụng đúng lệnh, chẳng hạn như gán giá trị không chính xác, bạn có thể gặp lỗi cú pháp.

  • Hệ điều hành không tương thích trên các hệ thống – Nếu hệ vỏ mã hóa không tương thích giữa các hệ thống Unix và DOS, có thể xảy ra lỗi không mong muốn.

  • Sự cố trong tập lệnh bash – Sự cố khi chạy tập lệnh bash trong tệp được sao chép từ hệ thống khác có thể dẫn đến lỗi mã thông báo không mong muốn.

Hãy xem xét một tệp có tên example.sh được tạo trong tập lệnh Linux Bash với các dòng lệnh sau cho mục đích giải thích. Tệp mẫu chứa khả năng xảy ra lỗi cú pháp và chứa tất cả các lệnh có thể được sử dụng trong tập lệnh trình bao.

str= ‘First command line of ‘(example file)’ in the script’
str= [(1,2),(3,4)]
if[ $day == “mon” ] then
 echo “mon”
else
 echo “no mon”
fi
for VARIABLE in {0..2}; then
do echo command1; echo command2; echo command3; echo command4; done
while true; do if [ $ day == “mon” ]; then echo “mon”; else echo “not mon”; done; fi

Phương pháp 1: Sửa lỗi thủ công trên từng dòng lệnh

Phương pháp sửa lỗi đầu tiên là tự sửa lỗi cú pháp trên từng dòng lệnh trong script. Phần này bao gồm các bước để giải quyết các lỗi cú pháp gần một mã thông báo không mong muốn trên các dòng lệnh. Phần sau đây mô tả quá trình khắc phục lỗi mã thông báo không mong muốn trong thiết bị đầu cuối. Chạy tệp trong Terminal bằng cách nhập ./example.sh và nhấn Enter.

2. Lưu ý các dòng chứa lỗi mã thông báo dòng lệnh không mong muốn trong đầu ra bên dưới.

3. Sửa lỗi trên từng dòng bằng các phương pháp được thảo luận bên dưới riêng lẻ và lưu tệp.

4. Chạy lại tệp sau khi thay đổi và kiểm tra xem lỗi cú pháp đã được khắc phục trong tệp chưa.

Bước I: Đọc nội dung của tệp

Bước đầu tiên để giải quyết lỗi cú pháp trên dòng lệnh là đọc tệp trong Terminal. Nếu có vấn đề với tập tin, bạn có thể không xem được. Phương pháp tiêu chuẩn để xem tệp là chạy tệp với ./example.sh, nhưng bạn không thể sửa đổi nội dung của tệp. Các tùy chọn để xem nội dung của tệp và sửa đổi các dòng lệnh để sửa lỗi cú pháp gần mã thông báo ‘(‘ không mong muốn sẽ được thảo luận bên dưới.

Quyền mua 1: Sử dụng lệnh CAT

Tùy chọn đầu tiên là sử dụng lệnh cat để xem tệp trong tập lệnh shell. Đọc nội dung của tệp có lỗi mã thông báo không mong muốn bằng cách sử dụng lệnh cat bằng cách nhập cat -v example.sh trong thiết bị đầu cuối.

Chú ý 1: Tệp example.sh dùng cho mục đích giải thích và bạn nên nhập tên của tệp chứa lỗi mã thông báo không mong muốn.

Chú ý 2: Lệnh cat -v được sử dụng để hiển thị tất cả các ký tự ẩn có thể đại diện cho dấu xuống dòng hoặc khoảng trắng không ngắt.

Quyền mua 2: Sử dụng lệnh VX

Nếu bạn không thể sử dụng lệnh cat, bạn có thể thử sử dụng lệnh vx để xem và thay đổi các lệnh trong tệp bằng cách làm theo bước dưới đây. Nhập lệnh sh –vx ./example.sh trong terminal để mở tệp.

Quyền mua 3: Thông qua lệnh từ

3. Nếu có một số ký tự ẩn trong dòng lệnh, bạn có thể sử dụng lệnh -a để xem tệp. Nếu nội dung của tệp không hiển thị trong tệp mã, bạn có thể thử đọc tệp bằng lệnh od -a example.sh để sửa đổi mã.

Bước II: Loại bỏ ngắt dòng hệ thống Windows

Nếu có ngắt dòng hệ thống trong tập lệnh shell Windowsbạn có thể sử dụng các lệnh của bảng điều khiển để loại bỏ các ngắt dòng và sao chép các dòng mã vào một tệp mới để sửa lỗi.

Nhập lệnh sau trong thiết bị đầu cuối để lưu nội dung của tệp vào một tệp khác có tên đã sửaexample.sh để xóa ngắt dòng hệ thống Windows trong kịch bản.

tr –d ‘r’ <example.sh> correctedexample.sh

Bước III: Đặt quyền cho tệp mới tạo

Bạn cần đặt quyền trên tệp mới tạo để chỉnh sửa tệp để tệp có thể được thực thi trong trình bao. Nhập lệnh dưới dạng chmod 755 fixedexample.sh trong thiết bị đầu cuối để cung cấp quyền truy cập tệp và chạy tệp. Giờ đây, bạn có thể xem tệp đã sửa và khắc phục sự cố định dạng cũng như sửa lỗi cú pháp gần mã thông báo ‘(‘ không mong muốn trong tệp.

Bước IV: Định dạng mã trong tệp

Bước thứ hai là định dạng từng dòng mã và thay đổi các dòng lệnh trong tệp theo cách thủ công. Các tùy chọn định dạng tệp để sửa lỗi cú pháp gần mã thông báo ‘(‘ không mong muốn sẽ được thảo luận bên dưới trong phần này.

Quyền mua 1: Thay nháy đơn bằng nháy kép

Nếu bạn sử dụng dấu nháy đơn trên các dòng lệnh thì cần thay đổi lệnh bằng cách thay dấu nháy đơn bằng dấu nháy kép để khắc phục lỗi cú pháp. Trong tệp example.sh, hãy xóa các dòng mã chứa ” i ” hoặc dấu nháy đơn trong lệnh và thay thế dấu nháy đơn bằng dấu nháy kép hoặc ” và “. Ở đây trong tệp mẫu, bạn cần thay đổi mã thành str=”Dòng lệnh đầu tiên “(tệp mẫu)” trong tập lệnh”

Lưu ý: dấu ngoặc kép là cần thiết cho các lệnh loại tham số, chẳng hạn như str= “[(1,2),(3,4)]“.

Quyền mua 2: Thêm $ vào dòng chuỗi

Nếu bạn đã thêm giá trị chuỗi vào tập lệnh, bạn cần thêm $ vào giá trị chuỗi để sửa lỗi cú pháp trong tập lệnh. Thêm $ cho các dòng lệnh có giá trị chuỗi để khắc phục lỗi không mong muốn. Ở đây trong tệp ví dụ, thay đổi dòng lệnh thành;

str= $ ‘First command line of ‘(example file)’ in the script’

Lưu ý: Nếu bạn sử dụng $ trong một giá trị chuỗi, bạn có thể bỏ qua chuỗi thoát dấu gạch chéo ngược vì các dòng lệnh được giải mã theo tiêu chuẩn ANSI C. Nói cách khác, bằng cách sử dụng $ làm giá trị chuỗi, bạn có thể tránh sử dụng dấu ngoặc kép thay vì dấu ngoặc đơn trên dòng lệnh.

Quyền mua 3: Chuyển đổi các tab thành khoảng trắng

Khoảng cách bạn để lại giữa hai câu lệnh trong lệnh phải là khoảng trắng thay vì tab để sửa lỗi cú pháp trong tập lệnh. Nếu bạn gặp lỗi trên Cygwin, bạn có thể thử chuyển đổi các tab trong mã thành khoảng trắng để sửa lỗi. Dòng lệnh được đưa ra dưới đây như;

do echo command1;       echo command2;             echo command3;             echo command4;             done

Lệnh trên cần viết lại như hình bên dưới để sửa lỗi.

do echo command1; echo command2; echo command3; echo command4; done

Quyền mua 4: Sử dụng ký tự thoát

Nếu bạn đang sử dụng ký tự bash, điều quan trọng là sử dụng ký tự thoát cùng với ký tự bash để sửa lỗi cú pháp. Dấu ngoặc đơn hoặc () là các ký tự đặc biệt bash trong tệp, vì vậy bạn sẽ cần sử dụng ký tự thoát hoặc dấu gạch chéo ngược trên dòng lệnh để thực thi lệnh. Str=”Dòng lệnh đầu tiên “(tệp mẫu)” trong tập lệnh sẽ không gây ra lỗi trong thiết bị đầu cuối vì ký tự thoát được sử dụng.

Quyền mua 5: Sử dụng khoảng cách giữa các ký tự

Theo mặc định, tập lệnh Shell nhận ra các lệnh và hướng dẫn trong tập lệnh. Phải cẩn thận sử dụng khoảng trắng giữa các ký tự một cách thích hợp để trình bao có thể xác định lệnh được đưa ra trong tập lệnh. Khoảng trắng là ký tự dùng để phân biệt giữa hai ký tự trên dòng lệnh. Không có khoảng cách giữa nếu và trong mã [, which gives the unexpected token error as the if[ command is not identified by the shell. If the code is changed to if [ $ day == “mon” ]; thì lỗi có thể được giải quyết bằng lệnh shell bulletin nếu được shell xác định.

Quyền mua 6: Sử dụng dấu tách lệnh để biết hướng dẫn

Các lệnh khác nhau trong tập lệnh shell phải được chia nhỏ thành các câu lệnh để Terminal có thể xác định các lệnh riêng lẻ. Bạn cần sử dụng trình tách lệnh để sửa lỗi cú pháp trong Linux Bash. Các câu lệnh trong một lệnh phải được phân tách bằng dấu tách lệnh, chẳng hạn như dấu chấm phẩy hoặc ; hoặc một dòng mới bằng cách nhấn Enter. Ví dụ: lệnh trong mã if [ $ day == “mon” ] nó cần phải được thay đổi như thể [ $ day == “mon” ]; sau đó sửa lỗi. Vì dấu chấm phẩy được dùng làm dấu phân cách lệnh giữa các ký tự [ and then, you can fix this error.

Option 7: Remove Additional Statements

Sometimes, you may have added additional statements or may have mixed up the codes in case of multiple nested loops. You need to remove the additional statements on the command lines to fix the Syntax error near unexpected token ‘(’ in the Linux Bash. The bash loops for…done or and the constructional constructs if… fi needs to be in the correct syntax. The example file has the wrong syntax in the for loop has the term then which is used in the if statement. Modifying the code as the following code will fix the unexpected token error. The statement then is an additional statement in the code and removing the term will fix the error.

for VARIABLE in {0..2}; do echo command1; echo command2; echo command3; echo command4; done 

Option 8: Ensure Order of Closing of Statements is Correct

If you are using many nested or conditional construct statements in the shell script, you have to ensure that the loops are closed in the order they are opened. You can use a new line separator to avoid conflicts with the loops. The order of closing the nested loops and conditional statements should be correct and must not be altered. The loops in the code while true; do if [ $ day == “mon” ]; sau đó lặp lại “mon”; ngược lại echo “not Mon”; Sẳn sàng; fi phải được đóng theo đúng thứ tự. Việc thay đổi mã như hình dưới đây có thể khắc phục lỗi mã thông báo không mong muốn do thứ tự đóng của câu lệnh sẽ được sửa.

while true; do if [ $ day == “mon” ]; then echo “mon”; else echo “not mon”; fi; done

Phương pháp 2: Viết lại mã

Nếu đã sao chép và dán mã vào một tệp mới trong Terminal, bạn có thể thử viết lại mã theo cách thủ công để sửa lỗi. Lỗi trong mã có thể được sửa nếu bạn viết mã không có lỗi định dạng trong tập lệnh trình bao. Điều này là do các vấn đề về định dạng và ký tự ẩn trong trình soạn thảo văn bản chẳng hạn như Microsoft Word mà bạn có thể đã sử dụng để sao chép và dán mã có thể gây ra lỗi.

Phương pháp 3: Sử dụng lệnh Dos2unix.exe

Nếu bạn đang sử dụng hệ điều hành Unix, bạn có thể viết mã dòng mới là n để chuyển đến dòng tiếp theo trong tệp. Tuy nhiên, nếu bạn đang sử dụng một hệ điều hành Windows, bạn cần chuyển đến dòng tiếp theo trong mã của mình bằng cách sử dụng dấu xuống dòng và nguồn cấp dữ liệu hoặc rn trong tệp. Nếu bạn thực thi mã được viết trong hệ điều hành Windows trong Cygwin, bạn có thể gặp lỗi cú pháp gần mã thông báo ‘(‘ không mong muốn.

Để khắc phục lỗi, hãy xóa dấu xuống dòng bằng cách sử dụng công cụ dòng lệnh DOS sang Unix làm công cụ chuyển đổi định dạng tệp văn bản. Nhập lệnh sau dưới dạng dos2unix.exe example.sh trong thiết bị đầu cuối và bạn có thể chuyển đổi tệp sang định dạng Unix.

***

Bài viết thảo luận về các phương pháp cơ bản để sửa lỗi cú pháp Bash gần mã thông báo “(” không mong muốn trong tập lệnh. Nếu bạn đang sử dụng Linux Bash, bạn có thể sử dụng các phương pháp được giải thích trong phần này để sửa lỗi cú pháp Bash gần mã thông báo không mong muốn. Bạn đã đọc hết bài viết và thấy nội dung hữu ích, vui lòng đóng góp ý kiến ​​và thắc mắc cho chúng tôi ở phần bình luận.

Mục lục