Saya membaca sekilas melalui /etc/rc.d/init.d/sendmail
berkas (saya tahu ini adalah hampir tidak pernah digunakan, tapi aku belajar untuk ujian), dan aku sudah menjadi sedikit bingung tentang &&
dan ||
operator. Saya telah membaca di mana mereka dapat digunakan dalam pernyataan seperti:
if [ test1 ] && [ test2 ]; then
echo "both tests are true"
elif [ test1 ] || [ test2 ]; then
echo "one test is true"
fi
Namun, skrip ini menampilkan pernyataan garis tunggal seperti:
[ -z "$SMQUEUE" ] && SMQUEUE="QUEUE"
[ -f /usr/sbin/sendmail ] || exit 0
Ini tampaknya menggunakan &&
dan ||
operator untuk memperoleh tanggapan berdasarkan tes, tapi saya belum bisa menggali dokumentasi mengenai penggunaan khusus dari operator ini. Adakah yang bisa menjelaskan hal ini dalam konteks khusus ini?
sumber
[ ... ]
untuk menjadi program", dalam banyak kasus adalah . Biasanya ada dalam file/bin/[
atau/usr/bin/[
.test
bukanif
atau[
. Danif [
danif test
tampaknya diselingi dengan[
dantest
tanpa sajak atau alasan yang jelas.test
muncul pada kesempatan, seperti di config.site untuk lib vendor di Fedora x86_64 .Inilah lembar contekan saya:
sumber
(a => b => a)
. "benar (alias palsu)":(a => b => b)
. "A; B" "lalu"(a => b => (() => b())(a()))
. "A && B" "jika tanpa yang lain (kapan)"(a => b => a()(() => right)(b))
. "A || B" "lain tanpa if (kecuali)"(a => b => a()(b)(() => right))
. "a && b || c" "ifThenElse"(a => b => c => (unless(when(a)(b))(c))())
.untuk memperluas jawaban @ Shawn-j-Goff dari atas,
&&
adalah logika AND, dan||
merupakan OR logis.Lihat ini bagian dari Advanced Bash Scripting Guide. Beberapa konten dari tautan untuk referensi pengguna seperti di bawah ini.
&& DAN
|| ATAU
sumber
Dari pengalaman saya, saya menggunakan && dan || untuk mengurangi pernyataan if ke satu baris.
Katakanlah kita sedang mencari file bernama /root/Sample.txt maka iterasi tradisional akan seperti berikut dalam shell:
6 baris ini dapat direduksi menjadi satu baris:
Ketika menjalankan beberapa iterasi untuk mengatur variabel atau untuk membuat file dll., Hidup lebih mudah dan skrip terlihat lebih licin menggunakan satu baris jika berfungsi, itu hanya kekurangannya adalah menjadi sedikit lebih sulit untuk mengimplementasikan beberapa perintah dari satu iterasi. Anda dapat menggunakan berbagai fungsi.
sumber
./someScript.sh & && echo 'ok' || echo 'ko'
Ada gagasan "jalan pintas".
Kapan
(expr1 && expr2)
dievaluasi -expr2
hanya dievaluasi jikaexp1
dievaluasi ke "benar". Ini karena keduanyaexpr1
DANexpr2
harus benar untuk(expr1 && expr2)
menjadi benar. Jikaexpr1
dievaluasi menjadi "false"expr2
TIDAK dievaluasi (jalan pintas) karena(expr1 && expr2)
sudah "terbang".Coba yang berikut - asumsikan file
F1
ada & fileF2
tidak ada:Demikian pula untuk
||
(atau) - tetapi jalan pintas terbalik.sumber
Contoh-contoh dalam jawaban oleh Shawn J. Goff benar, tetapi penjelasannya sebaliknya. Silakan periksa:
sumber
&&
hasil seluruh ekspresi untuk mengembalikan false ?