Saya memiliki fungsi bash shell yang mengambil argumen dan melakukan sesuatu di atasnya jika diperlukan.
do_somthing() {
if [need to do something on $1]
then
do it
return 0
else
return 1
fi
}
Saya ingin memanggil metode ini dengan beberapa argumen dan memeriksa apakah setidaknya salah satu dari mereka berhasil.
Saya mencoba sesuatu seperti:
if [ do_something "arg1" ||
do_something "arg2" ||
do_something "arg3" ]
then
echo "OK"
else
echo "NOT OK"
fi
Apa yang akan menjadi sintaks yang benar untuk itu?
SUNTING
Juga - Saya ingin memastikan bahwa meskipun kondisi pertama benar semua kondisi lainnya masih akan dievaluasi.
Terima kasih,
Jawaban:
Jalankan perintah terlebih dahulu, lalu periksa apakah setidaknya salah satu dari mereka berhasil.
sumber
if ((success))
mengevaluasi sesuatu yang berbeda dariif success
. Saya bingung :)((...))
adalah perintah aritmatika. Jika hasilnya di dalam, bukan nol, hasilnya benar (0). Jika hasilnya di dalam adalah 0, itu mengembalikan false (1). "sukses" diperlakukan sebagai variabel yang diharapkan mengandung angka. Lihat mywiki.wooledge.org/ArithmeticExpressionGunakan garis miring terbalik.
EDIT
Juga - saya ingin memastikan bahwa meskipun kondisi pertama benar semua kondisi lainnya masih akan dievaluasi.
Itu tidak mungkin hanya dalam satu pernyataan jika. Alih-alih, Anda dapat menggunakan for for yang mengulang argumen dan mengevaluasinya secara terpisah. Sesuatu seperti:
sumber
[: do_something: unary operator expected
[ expr1 ] || [ expr2 ]
bukannya[ expr1 || expr2 ]
.do_something "arg1"
ditafsirkan sebagai dua argumen sedangkan ekspresi harusnya unary. Adakah cara membuatdo_something "arg1"
dievaluasi sebagai satu argumen?if [ $(do_something "arg1") ]
.Sintaks yang benar adalah:
\
digunakan untuk memberi tahu shell perintah berlanjut di baris berikutnya.EDIT : Saya pikir ini harus melakukan apa yang Anda inginkan:
sumber
[: too many arguments
Aku lebih memilih:
sumber
\n
karakter, sehinggaif
pernyataan Anda akan menghasilkan beberapa kesalahan, dando_something
bukan perintah nama, sehingga lebih banyak kesalahando_something
adalah fungsi tentunya.do_something
harus fungsi atau perintah, apa lagi yang seharusnya? Selain itu saya tidak melihat di mana ia akan menghasilkan\n
karakter kecuali setelah menggemakan hasilnya dan ini diharapkan ...