Làm thế nào để sử dụng $? và kiểm tra để kiểm tra chức năng?


7
    #!/bin/sh

function checkExit(){
    if test "$?" != "0"; then
      echo Command $1 exited with abnormal status
      exit 1;
    else echo $?
    fi
}

function echoThenRun () { # echo and then run the command
  echo $1
  $1
  ret=$?
  echo $ret
  return $ret
}
file=test_file
echo > $file
echoThenRun "test -f $file"
checkExit $file
echo "all right!"

Đầu ra của việc thực thi tập lệnh:

$  ~/Downloads/test.sh 
test -f test_file
0
1 # why 1 here??
all right!

Câu trả lời:


11

Có một cách đơn giản hơn những gì bạn đang làm. Nếu bạn sử dụng set -x, tập lệnh sẽ tự động lặp lại từng dòng trước khi nó được thực thi.

Ngoài ra, ngay khi bạn thực thi một lệnh khác, $?được thay thế bằng mã thoát của lệnh đó.

Bạn sẽ phải sao lưu nó thành một biến nếu bạn sẽ làm bất cứ điều gì với nó ngoài việc kiểm tra nhanh và quên. Đây [thực sự là một chương trình có mã thoát riêng.

Ví dụ:

set -x # make sure the command echos
execute some command...
result="$?"
set +x # undo command echoing
if [ "$result" -ne 0 ]; then
    echo "Your command exited with non-zero status $result"
fi

các iftuyên bố là những gì tôi đang tìm kiếm
bắc-bradley

omg tại sao không ai nói với tôi sớm hơn mà set -xtồn tại !!! Đó là tính năng hữu ích nhất. Cảm ơn rất nhiều!
Michal Artazov

3

Có vẻ như lệnh test "$?" != "0"kết thúc thiết lập $? đến 1. Giá trị $? được sử dụng trong các đối số để test. testđặt $? đến một giá trị khác không vì "0" về mặt từ vựng bằng "0". "! =" Trả testvề giá trị khác không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.