Saya memiliki if
dalam skrip bash saya yang harus memeriksa apakah BAIK dari 2 file ada, jika tidak ada itu harus cocok.
Kode yang saya miliki:
if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then
echo "match"
fi
Tetapi ini sepertinya tidak berhasil karena suatu alasan.
Saya 110% yakin bahwa 2 file ini tidak ada. Saya tidak mendapatkan kesalahan, hanya saja tidak masuk if
.
Saya baru mengenal bash scripting jadi saya tidak yakin apa yang salah.
bash
shell-script
Peppercat101
sumber
sumber
[[ ! -f /etc/.../... ]]; echo $?
untuk masing-masing.[[ -f xxx ]]
mengembalikan true jika xxx ada dan merupakan file biasa (atau symlink ke file biasa). Ini akan mengembalikan false jika tidak ada, atau jika tidak dapat mengetahui apakah itu ada atau tidak atau jika ada tetapi bukan file biasa (direktori, pipa, perangkat, soket ...) atau jika itu adalah symlink ke file yang tidak ada atau tidak tahu apakah itu ada atau tidak atau bukan file biasa ...[[ -e $file ]] || [[ -L $file ]]
lebih dekat dengan tes keberadaan.ls -d -- "$file" > /dev/null 2>&1
bahkan lebih dekat. Dan sebagai aturan, tes semacam ini mengarah pada kondisi balapan. Mungkin ada cara lain.Jawaban:
Jika Anda ingin baik maka Anda ingin
OR
, tidakAND
.match
jika keduanya tidak ada.Tapi , Anda berkata:
Jadi pernyataan Anda bertentangan dengan dirinya sendiri. Setidaknya satu dari file-file harus ada, jika Anda menjalankan bahwa kode.
Jika Anda ingin melihat bagaimana
if
pernyataan Anda mengevaluasi, jalankan dengan-x
.Maka Anda akan melihat eksekusi.
sumber
Bukankah seharusnya seperti ini? A adalah file atau B adalah file, lalu blabla.
sumber
Ini juga dapat bekerja untuk apa yang Anda coba lakukan. Kurung tunggal tidak umum digunakan hari ini dengan bash, tetapi ini masih merupakan pilihan. Menggunakan '-o' secara efektif merupakan operasi "ATAU", dan "!" meniadakan kondisinya.
sumber
[
dibash
. Selain itu, saya gagal melihat bagaimana ini menjawab pertanyaan.[ ! -f ${var} -a ! -f {var}.class ] && echo "match"
harus. Pencariannya adalah: jika mereka (keduanya) tidak ada, itu seharusnyaecho match
.Kode Anda memenuhi persyaratan Anda: itu akan dicetak
match
asalkan tidak dapat menemukan salah satu file.Karena itu alasannya
match
tidak dicetak di tempat lain. Anda harus mengonfirmasi bahwa blok kode sedang dicapai, yang dapat Anda lakukan dengan mengelilinginya dengan beberapa pesan debug. Misalnya, seperti ini:Preferensi saya yang biasa adalah untuk men-debug pesan untuk pergi ke stderr untuk menghindari gangguan aliran data ke stdout , tetapi saya telah menghindari itu di sini karena Anda mengatakan Anda seorang pemula. Berikut adalah satu contoh yang menunjukkan bagaimana Anda bisa menulis ke stdout :
sumber