Operator && menjalankan perintah berikutnya jika perintah sebelumnya berhasil, (kode keluar yang dikembalikan ($?) 0 = logis benar).
Dalam bentuk A && B || C
, perintah (atau kondisi) A dievaluasi dan jika A mengembalikan true (sukses, keluar kode 0) maka perintah B dijalankan. Jika A gagal (dengan demikian akan mengembalikan kode keluar - palsu selain 0) dan / atau B gagal (kembali salah ) maka perintah C akan dieksekusi.
Juga &&
operator digunakan sebagai DAN dalam kondisi cek dan operator ||
bekerja seperti ATAU dalam kondisi cek.
Bergantung pada apa yang ingin Anda lakukan dengan skrip Anda, formulir A && B || C
dapat digunakan untuk pemeriksaan kondisi seperti contoh Anda atau dapat digunakan untuk rantai perintah dan memastikan serangkaian perintah yang akan dieksekusi jika perintah sebelumnya memiliki kode keluar 0 yang berhasil .
Inilah sebabnya mengapa itu adalah umum untuk melihat perintah seperti:
do_something && do_something_else_that_depended_on_something
.
Contoh:
apt-get update && apt-get upgrade
Jika pembaruan gagal maka pemutakhiran tidak dilakukan, (masuk akal di dunia nyata ...).
mkdir test && echo "Something" > test/file
Bagian echo "Something"
akan dieksekusi hanya jika mkdir test
berhasil dan operasi mengembalikan kode keluar 0 .
./configure --prefix=/usr && make && sudo make install
Biasanya ditemukan pada kompilasi pekerjaan untuk menghubungkan perintah yang diperlukan secara bersamaan.
Jika Anda mencoba menerapkan "rantai" di atas dengan if - then - else Anda akan membutuhkan lebih banyak perintah dan pemeriksaan (dan dengan demikian lebih banyak kode untuk ditulis - lebih banyak hal yang salah) untuk tugas yang sederhana.
Juga, ingatlah bahwa perintah berantai dengan && dan || dibaca oleh shell dari kiri ke kanan. Anda mungkin perlu mengelompokkan perintah dan memeriksa kondisi dengan tanda kurung untuk bergantung pada langkah berikutnya pada keluaran yang berhasil dari beberapa perintah sebelumnya. Sebagai contoh lihat ini:
root@debian:$ true || true && false;echo $?
1
#read from left to right
#true OR true=true AND false = false = exit code 1=not success
root@debian:$ true || (true && false);echo $?
0
# true OR (true AND false)=true OR false = true = exit code 0 = success
Atau contoh kehidupan nyata:
root@debian:$ a=1;b=1;c=1;[[ $a -eq 1 ]] || [[ $b -eq 1 ]] && [[ $c -eq 2 ]];echo $?
1
#condition $a = true OR condition b = true AND condition $c = false
#=> yields false as read from left to right, thus exit code=1 = not ok
root@debian:$ a=1;b=1;c=1;[[ $a -eq 1 ]] || [[ $b -eq 1 && $c -eq 2 ]];echo $?
0
#vars b and c are checked in a group which returns false,
#condition check of var a returns true, thus true OR false yields true = exit code 0
Perlu diingat bahwa beberapa perintah mengembalikan kode keluar yang berbeda tergantung pada proses yang dijalankan, atau mengembalikan kode yang berbeda tergantung pada tindakan mereka, (misalnya perintah GNU diff
, mengembalikan 1 jika dua file berbeda, dan 0 jika tidak). Perintah semacam itu perlu diperlakukan dengan hati-hati di && dan || .
Juga hanya untuk memiliki semua teka-teki bersama, pikirkan gabungan perintah menggunakan ;
operator. Dengan format A;B;C
semua perintah akan dieksekusi secara seri tidak peduli apa kode keluar dari perintah A
dan B
.