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 -ci
với các đối số text
và file.sh
và đặt biến check
với giá trị grep
trong 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 check
biế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 grep
khô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.