Lệnh của bạn,
check=grep -ci 'text' file.sh
sẽ được giải thích bằng vỏ là "chạy lệnh -civới các đối số textvà file.shvà đặt biến checkvới giá trị greptrong môi trường của nó".
Shell lưu trữ giá trị thoát của lệnh được thực hiện gần đây nhất trong biến ?. Bạn có thể gán giá trị của nó cho một trong các biến của riêng bạn như thế này:
grep -i 'PATTERN' file
check=$?
Nếu bạn muốn hành động theo giá trị này, bạn có thể sử dụng checkbiến của mình :
if [ "$check" -eq 0 ]; then
# do things for success
else
# do other things for failure
fi
hoặc bạn có thể bỏ qua việc sử dụng một biến riêng biệt và phải kiểm tra $?tất cả cùng nhau:
if grep -q -i 'pattern' file; then
# do things (pattern was found)
else
# do other things (pattern was not found)
fi
(lưu ý rằng -q, nó hướng dẫn grepkhông xuất bất cứ thứ gì và thoát ra ngay khi có thứ gì đó phù hợp; chúng tôi không thực sự quan tâm đến những gì phù hợp ở đây)
Hoặc, nếu bạn chỉ muốn "làm mọi thứ" khi không tìm thấy mẫu:
if ! grep -q -i 'pattern' file; then
# do things (pattern was not found)
fi
Lưu $?vào một biến khác chỉ cần thiết nếu bạn cần sử dụng nó sau này, khi giá trị trong $?đã bị ghi đè, như trong
mkdir "$dir"
err=$?
if [ "$err" -ne 0 ] && [ ! -d "$dir" ]; then
printf 'Error creating %s (error code %d)\n' "$dir" "$err" >&2
exit "$err"
fi
Trong đoạn mã trên, $?sẽ được ghi đè bằng kết quả của [ "$err" -ne 0 ] && [ ! -d "$dir" ]bài kiểm tra. Lưu nó ở đây thực sự chỉ cần thiết nếu chúng ta cần hiển thị và sử dụng nó với exit.
$?ngay sau khi lệnh kết thúc.