Thường thì khi viết các tập lệnh Bash, bạn sẽ cần phải kết thúc tập lệnh khi một điều kiện nhất định được đáp ứng hoặc thực hiện hành động dựa trên code thoát của một lệnh.
Trong bài viết này, chúng ta sẽ tìm hiểu về lệnh exit
tích hợp sẵn trong Bash và các trạng thái thoát của các lệnh được thực thi.
Trạng thái thoát
Mỗi lệnh shell trả về một code thoát khi nó kết thúc, thành công hoặc không thành công.
Theo quy ước, code thoát bằng 0 cho biết lệnh đã hoàn thành thành công và code khác 0 nghĩa là đã gặp lỗi.
Biến đặc biệt $?
trả về trạng thái thoát của lệnh được thực thi cuối cùng:
date &> /dev/null echo $?
Lệnh date
thành công, và code thoát là 0:
0
Nếu bạn cố gắng chạy ls
trên một thư mục không tồn tại, code thoát sẽ khác 0:
ls /nonexisting_dir &> /dev/null echo $?
Output:
2
Mã trạng thái có thể được sử dụng để tìm hiểu lý do tại sao lệnh không thành công. Trang man của mỗi lệnh bao gồm thông tin về các code thoát.
Khi thực hiện một multi-command pipeline, trạng thái thoát của pipeline là trạng thái của lệnh cuối cùng:
sudo tcpdump -n -l | tee file.out echo $?
Trong ví dụ trên echo $?
sẽ in code thoát của lệnh tee
.
Lệnh exit bash
Lệnh shell exit
thoát có trạng thái N
. Nó có cú pháp sau:
exit N
Nếu N
không được cung cấp, code trạng thái thoát là code của lệnh được thực thi cuối cùng.
Khi được sử dụng trong các tập lệnh shell, giá trị được cung cấp làm đối số cho lệnh exit
sẽ được trả về shell dưới dạng code thoát.
Các ví dụ
Trạng thái thoát của các lệnh có thể được sử dụng trong các lệnh có điều kiện như if
. Trong ví dụ sau grep
sẽ thoát bằng 0 (có nghĩa là true trong kịch bản shell) nếu tìm thấy “search-string” trong filename
:
if grep -q "search-string" filename then echo "String found." else echo "String not found." fi
Khi chạy một danh sách các lệnh được phân tách bằng &&
(AND) hoặc ||
(OR), trạng thái thoát của lệnh sẽ xác định xem lệnh tiếp theo trong danh sách có được thực hiện hay không. Ở đây, mkdir
lệnh sẽ chỉ được thực thi nếu cd
trả về 0:
cd /opt/code && mkdir project
Nếu một tập lệnh kết thúc bằng exit
mà không chỉ định một tham số, thì code thoát tập lệnh là code của lệnh cuối cùng được thực thi trong tập lệnh.~ / script.sh
#!/bin/bash echo "doing stuff..." exit
Sử dụng just exit
giống như exit $?
hoặc bỏ qua exit
.
Dưới đây là một ví dụ cho thấy cách kết thúc tập lệnh nếu được người dùng không phải root gọi:
#!/bin/bash if [[ "$(whoami)" != root ]]; then echo "Only user root can run this script." exit 1 fi echo "doing stuff..." exit 0
Nếu bạn chạy tập lệnh dưới dạng root, code thoát sẽ bằng không. Nếu không, tập lệnh sẽ thoát với trạng thái 1
.
Phần kết luận
Mỗi lệnh shell trả về một code thoát khi nó kết thúc. Các exit
lệnh được sử dụng để thoát khỏi một vỏ với một tình trạng nhất định.
Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, vui lòng để lại bình luận.