Trong bài giới thiệu bash, chúng ta đã học rằng file shell-script chứa danh sách lệnh được thực thi bởi trình thông dịch shell. Trong bài này chúng ta sẽ xem lại về lệnh shell và nội tại của nó.
Một lệnh là một chuỗi từ. Từ đầu tiên chỉ lệnh được thực thi và các từ còn lại được truyền như đối số, nơi đối số có thể là tùy chọn hoặc tham số cho lệnh.
Một số lệnh Unix phổ biến bạn thực thi tại dòng lệnh là lệnh shell. Ví dụ: ls, lpr và grep.
$ ls -alF $ lpr filename $ grep "string" filename
Trạng Thái Thoát Lệnh Shell
Giá trị trả về của một lệnh là trạng thái thoát của nó, hoặc 128 + N nếu lệnh bị chấm dứt bởi tín hiệu N. Trạng thái thoát dùng để kiểm tra kết quả (thành công/thất bại) của việc thực thi lệnh. Nếu trạng thái thoát là 0, lệnh thành công. Nếu lệnh thất bại, trạng thái thoát sẽ khác 0.
| Giá Trị Thoát | Trạng Thái Thoát |
|---|---|
| 0 (Không) | Thành công |
| Khác 0 | Thất bại |
| 2 | Sử dụng sai |
| 127 | Lệnh không tìm thấy |
| 126 | Không phải file thực thi |
Biến Shell $?
Tên biến shell $? là biến built-in đặc biệt chứa trạng thái thoát của lệnh gần nhất được thực thi.
- Sau thực thi hàm shell,
$?trả về trạng thái thoát của lệnh cuối cùng thực thi trong hàm. - Sau thực thi script shell,
$?trả về trạng thái thoát của lệnh cuối cùng thực thi trong script.
Script Shell Mẫu Giải Thích Trạng Thái Thoát Lệnh Shell
Script shell exitstatus.sh sau cho ví dụ các trạng thái thoát lệnh shell khác nhau.
$ cat exitstatus.sh #! /bin/bash echo -e "Successful execution" echo -e "=====================" echo "hello world" # Exit status returns 0, because the above command is a success. echo "Exit status" $? echo -e "Incorrect usage" echo -e "=====================" ls --option # Incorrect usage, so exit status will be 2. echo "Exit status" $? echo -e "Command Not found" echo -e "=====================" bashscript # Exit status returns 127, because bashscript command not found echo "Exit status" $? echo -e "Command is not an executable" echo -e "=============================" ls -l execution.sh ./execution.sh # Exit status returns 126, because its not an executable. echo "Exit status" $?
Bây giờ, thực thi exitstatus.sh để thấy các trạng thái thoát khác nhau cho bởi script mẫu.
$ bash exitstatus.sh Successful execution ===================== hello world Exit status 0 Incorrect usage ===================== ls: unrecognized option `--option' Try `ls --help' for more information. Exit status 2 Command Not found ===================== exitstaus.sh: line 15: bashscript: command not found Exit status 127 Command is not an executable ============================= -rw-r--r-- 1 root root 659 Mar 9 13:36 execution.sh exitstatus.sh: line 21: ./execution.sh: Permission denied Exit status 126
Lưu ý: Kiểm tra giá trị trả về của hàm hoặc lệnh là một trong những trách nhiệm chính của lập trình viên. Điều này nên trở thành bản năng thứ hai khi viết bất kỳ mã nào.