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.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments