Saya baru mengenal bash dan saya terjebak mencoba meniadakan perintah berikut:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
echo "Sorry you are Offline"
exit 1
Ini jika kondisi mengembalikan true jika saya terhubung ke internet. Saya ingin itu terjadi sebaliknya tetapi menempatkan di !
mana saja tampaknya tidak berhasil.
linux
bash
if-statement
negate
Sudh33ra
sumber
sumber
if ! [[ ...
bekerjaJawaban:
Kamu bisa memilih:
!
membalikkan pengembalian ekspresi berikut, masing-masing.sumber
test
perintah:if test $? -ne 0; then
if
mengharapkan pernyataan yang 0 atau 1, sehingga Anda dapat menggunakan perintah itu sendiri dan membalikkannya:if ! wget ...; then ...; fi
Lebih baik
sumber
!
dan berikut ini jika tidak Anda akan melakukan ekspansi riwayat. unix.stackexchange.com/questions/3747/…Jika Anda merasa malas, berikut ini adalah metode penanganan kondisi yang singkat menggunakan
||
(atau) dan&&
(dan) setelah operasi:sumber
&&
setelah gema menjadi a;
. Alasan untuk ini adalah bahwa jika output sedang diarahkan ke file pada disk penuh,echo
kegagalan akan kembali danexit
tidak akan pernah menyala. Ini mungkin bukan perilaku yang Anda inginkan.set -e
dan gagalecho
akan keluar dari skripKarena Anda membandingkan angka, Anda dapat menggunakan ekspresi aritmatika , yang memungkinkan penanganan parameter dan perbandingan yang lebih mudah:
Perhatikan bagaimana alih-alih
-ne
, Anda bisa menggunakannya!=
. Dalam konteks aritmatika, kita bahkan tidak perlu menambahkan$
parameter, yaitu,berfungsi dengan sangat baik. Ini tidak sesuai
$?
dengan parameter khusus.Lebih lanjut, karena
(( ... ))
mengevaluasi nilai bukan nol menjadi benar, yaitu, memiliki status pengembalian 0 untuk nilai bukan nol dan status pengembalian 1 jika tidak, kita dapat mempersingkat menjaditetapi ini mungkin membingungkan lebih banyak orang daripada nilai penekanan tombol yang disimpan.
The
(( ... ))
membangun tersedia di Bash, tetapi tidak diperlukan oleh POSIX shell spesifikasi (disebutkan sebagai kemungkinan perpanjangan, meskipun).Semua ini dikatakan, lebih baik untuk menghindari
$?
sama sekali menurut saya, seperti dalam jawaban Cole dan jawaban Steven .sumber
(( ... ))
? Referensi Programmer POSIX - Perintah Majemuk:)
Anda dapat menggunakan perbandingan yang tidak setara
-ne
alih-alih-eq
:sumber