Pertanyaan Bagaimana cara memeriksa apakah suatu perintah berhasil?
Apakah ada cara untuk memeriksa apakah ada kesalahan dalam mengeksekusi perintah?
Contoh:
test1=`sed -i "/:@/c connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase" $search`
valid $test1
function valid () {
if $test -eq 1; then
echo "OK"
else echo "ERROR"
fi
}
Saya sudah mencoba melakukan itu tetapi tampaknya itu tidak berhasil. Saya tidak melakukan itu.
159
2018-03-07 11:40
asal
Jawaban:
Nilai kembalian disimpan di $?
. 0 menunjukkan keberhasilan, yang lain menunjukkan kesalahan.
some_command
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
Seperti nilai tekstual lainnya, Anda dapat menyimpannya dalam variabel untuk perbandingan di masa mendatang:
some_command
retval=$?
do_something $retval
if [ $retval -ne 0 ]; then
echo "Return code was not zero but $retval"
fi
Untuk kemungkinan operator pembanding, lihat man test
.
238
2018-03-07 12:06
Jika Anda hanya perlu tahu apakah perintah berhasil atau gagal, jangan repot-repot menguji $?
, cukup uji perintahnya secara langsung. Misalnya.:
if some_command; then
printf 'some_command succeeded\n'
else
printf 'some_command failed\n'
fi
Dan menugaskan output ke variabel tidak mengubah nilai kembalian (baik, kecuali jika berperilaku berbeda ketika stdout bukan terminal tentu saja).
if output=$(some_command); then
printf 'some_command succeded, the output was «%s»\n' "$output"
fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals menjelaskan if
lebih detail.
60
2018-03-08 23:54
command && echo OK || echo Failed
19
2017-12-01 21:19
$? harus berisi status keluar dari perintah sebelumnya, yang seharusnya nol tanpa kesalahan.
Jadi, sesuatu seperti;
cd /nonexistant
if [ $? -ne 0 ]
then
echo failed
else
echo success!
fi
untuk sebagian besar kasus, lebih mudah untuk menggunakan && membangun ke perintah rantai yang perlu bergantung satu sama lain. Begitu cd /nonexistant && echo success!
akan tidak gema kesuksesan karena perintah istirahat sebelum &&. Konsekuensi dari ini adalah ||, di mana cd /nonexistant || echo fail
akan echo gagal karena cd gagal. (ini menjadi berguna jika Anda menggunakan sesuatu seperti || keluar, yang akan mengakhiri skrip jika perintah sebelumnya gagal.)
12
2018-03-07 12:04
command && echo $? || echo $?
4
2017-08-12 16:01
Untuk pemeriksaan kesalahan perintah Anda:
execute [INVOKING-FUNCTION] [COMMAND]
execute () {
error=$($2 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "$1: $error"
exit 1
fi
}
Terinspirasi dalam pembuatan Lean:
2
2017-12-29 04:20
Perlu dicatat itu if...then...fi
dan &&
/||
jenis pendekatan berhubungan dengan status keluar yang dikembalikan oleh perintah yang ingin kita uji (0 pada keberhasilan); namun, beberapa perintah tidak mengembalikan status keluar non-nol jika perintah gagal atau tidak dapat menangani masukan. Ini artinya biasa if
dan &&
/||
pendekatan tidak akan berfungsi untuk perintah-perintah tertentu.
Misalnya, di Linux GNU file
masih keluar dengan 0 jika menerima file yang tidak ada sebagai argumen dan find
tidak dapat menemukan file yang ditentukan pengguna.
$ find . -name "not_existing_file"
$ echo $?
0
$ file ./not_existing_file
./not_existing_file: cannot open `./not_existing_file' (No such file or directory)
$ echo $?
0
Dalam kasus semacam itu, satu cara potensial yang dapat kami lakukan untuk mengatasi situasi ini adalah dengan membaca stderr
/stdin
pesan, mis. mereka yang kembali file
perintah, atau parse keluaran dari perintah seperti di find
. Untuk tujuan itu, case
pernyataan bisa digunakan.
$ file ./doesntexist | while IFS= read -r output; do
> case "$output" in
> *"No such file or directory"*) printf "%s\n" "This will show up if failed";;
> *) printf "%s\n" "This will show up if succeeded" ;;
> esac
> done
This will show up if failed
$ find . -name "doesn'texist" | if ! read IFS= out; then echo "File not found"; fi
File not found
(Ini adalah repost dari jawabanku sendiri pertanyaan terkait di unix.stackexchange.com )
0
2017-11-13 18:58
Seperti disebutkan dalam banyak jawaban lainnya, tes sederhana $?
akan melakukannya, seperti ini
if [ $? -eq 0 ]; then something; fi
Jika Anda ingin menguji apakah perintah gagal, Anda dapat menggunakan versi yang lebih pendek di bash
(tapi mungkin berlebihan) sebagai berikut:
if (($?)); then something; fi
Ini berfungsi dengan menggunakan (( ))
mode aritmatika, jadi jika perintah kembali success
, i.e. $? = 0
maka tes akan dievaluasi ((0))
yang menguji sebagai false
, jika tidak, itu akan kembali true
.
Untuk menguji keberhasilan, Anda bisa menggunakan:
if ! (($?)); then something; fi
tapi itu tidak lebih pendek dari contoh pertama.
0
2017-08-16 21:07