KIỂM TRA EXIT CODE TRONG BASH
Có khá nhiều exit code được sử dụng trên các hệ thống Linux, mặc dù không có danh sách nào có thể hiển thị khi bạn cảm thấy tò mò. Trên thực tế, bạn sẽ không nhìn thấy exit code trừ khi bạn yêu cầu cụ thể.
Thay vào đó, bạn sẽ thấy mô tả bằng văn bản về sự cố bạn gặp phải – chẳng hạn như “Không có tệp hoặc thư mục nào như vậy” - trong ngữ cảnh như sau:
$ bin / runme
bash: bin / runme: No such file or directory
Nếu bạn muốn xem exit code dạng số, bạn có thể sử dụng lệnh echo $? . Thông báo lỗi sẽ cho bạn biết rằng không có tập lệnh “runme” nào trong thư mục bin của bạn. Lệnh echo $? sẽ phản hồi chỉ với một số.
$ echo $?
127
Đối với hầu hết các lệnh bạn chạy trên dòng lệnh Linux, exit code sẽ là 0. Điều này có nghĩa là không có lỗi hoặc sự cố nào gặp phải
$ pwd
/home /justme
$ echo $?
0
$echo Xin chào, Thế giới
Xin chào, Thế giới
$ echo$?
0
Khi bạn cố gắng kiểm tra một tệp không tồn tại hoặc viết sai tên lệnh, bạn sẽ nhận được phản hồi số lớn hơn.
$ cat nosuchfile
Cat: nosuchfile: No such file or directory
% echo $?
1
$ daet
Bash: daet:command not found…
Similar command is: ‘date’
$ echo $?
127
Đôi khi, kết quả đầu ra của bạn có thể cho thấy bạn không gặp phải bất kỳ sự cố nào, nhưng mã lỗi vẫn có thể lớn hơn 1, cho thấy rằng một số lỗi đã xảy ra. Bạn có thể phải quét qua đầu ra để phát hiện một hoặc hai thông báo “quyền bị từ chối” lẻ loi. Mặc dù tôi đã để lại cho mình toàn bộ màn hình đầu ra mà lệnh đầu tiên bên dưới sẽ tạo ra, tôi vẫn có thể thấy rằng nó đã gặp phải một số loại vấn đề vì nó để lại cho tôi exit code là 1:
$ Is –IR /usr > /dev/null 2>&1
$echo $?
1
Bạn cũng có thể sử dụng lệnh bash exit để thoát khỏi shell bằng một mã thoát cụ thể. Trong các lệnh bên dưới, tôi bắt đầu trình báo thứ hai, thoát khỏi nó và sau đó hiển thị exit code mà tôi đã yêu cầu sử dụng.
$ bash <== start new shell
$exit 111
Exit
$ echo$?
111
Bạn có thể sử dụng bất kỳ giá trị nào bạn muốn với lệnh exit, nhưng nếu bạn sử dụng giá trị lớn hơn 256, exit code sẽ là số bạn đã nhập trừ đi 256 như hình dưới đây. Rõ ràng, ít hơn 256 exit code đã được xác định.
$ bash
$exit257
Exit
$ echo$?
1
Bạn cũng có thể lấy một tập lệnh để thoát bằng một mã cụ thể bằng cách bao gồm một lệnh thoát. Nếu bạn không cung cấp giá trị số (tức là nếu bạn sử dụng lệnh thoát không có đối số), nó sẽ trả về giá trị 0.
$ cat runme
#!/bin/bash
Echo Hello, Wỏd
Exit 12
$ runme
Hello, Word
$ echo$?
12
Nếu bạn chạy một tập lệnh mà không sử dụng lệnh thoát, nó sẽ trả về exit code từ lệnh cuối cùng được chạy trong tập lệnh.
$ somescript
Hello
Cat: nosuchfile: No such file or directory
% echo$?
1
Hãy nhớ rằng bất kỳ lệnh nào bạn chạy trên dòng lệnh sẽ trả về exit code cho dù bạn có yêu cầu xem hay không. Nếu bạn ping một hệ thống không tồn tại trên mạng của bạn hoặc không phản hồi vì lý do nào đó, bạn sẽ thấy một cái gì đó như sau:
$ ping 192.168.0.111
PING 192.168.0.111 (192.168.0.111) 56(84) bytes of data.
From 192.168.0.7 icmp_seq=1 Destination Host Unreachable
From 192.168.0.7 icmp_seq=2 Destination Host Unreachable
From 192.168.0.7 icmp_seq=3 Destination Host Unreachable
From 192.168.0.7 icmp_seq=4 Destination Host Unreachable
----192.168.0.111 ping satistics ----
4 packets transmitted, 0 received, +4 errors, 100% packetloss, time 3061ms
Pipe 3
$echo $?
1
Lưu Trọng Phúc - Phòng Kỹ Thuật VnPro