$ jika benar; maka gema YA; jika tidak, gema TIDAK; jika salah; maka gema YA;
$ jika benar && benar;maka gema YA; lain gema TIDAK$ jika benar && salah;maka gema YA; lain gema TIDAK$ jika salah && salah;lalu gema YA; ;lalu gema YA; jika tidak, gema TIDAK;
$ jika benar ||.benar;lalu gema YA; lain gema TIDAK; fiYES$ jika benar ||. salah;lalu gema YA$jika salah || salah ||. salah;lalu gema YA; jika tidak, gema TIDAK;
$ jika ! salah; maka gema YA; jika tidak, gema TIDAK; fiYES$ jika ! benar; maka gema YA;
Itu bisa dilihat
BENARDan
PALSUKami melanjutkan sesuai dengan pemahaman kami tentang operasi logis, namun untuk lebih memahami implementasi operasi logis Shell, kami harus mencari tahu,
BENARDan
PALSUBagaimana cara kerjanya?
Jawabannya adalah: Tidak.
BENARDan
PALSUMereka bukan nilai logika itu sendiri, semuanya adalah perintah bawaan Shell, tetapi nilai kembaliannya adalah "nilai logis":
$ benar$ gema $?0$ salah$ gema $?1
dapat dilihat
BENARmengembalikan 0, dan
PALSUKemudian 1 dikembalikan. Ini tidak sesuai dengan nilai sebenarnya 1 dan 0 yang kita pelajari dalam matematika diskrit, namun sebaliknya.
$ help true falsetrue: true Mengembalikan hasil yang sukses.false: false Mengembalikan hasil yang gagal.$ type true falsetrue adalah shell builtinfalse adalah shell builtin
menjelaskan:
$?Ini adalah variabel khusus yang menyimpan status akhir (kode status keluar) dari proses terakhir.
Dari operasi di atas, tidak sulit untuk memikirkan mengapa penekanan ditempatkan pada pemrograman bahasa C.
utamaTambahkan di depan fungsi
ke dalam, dan tambahkan di akhir
kembali 0. Karena di Shell, 0 akan digunakan sebagai tanda berhasil tidaknya program tersebut
BENARDan
PALSUIntinya, mereka digunakan untuk mencerminkan apakah program tertentu berakhir dengan benar, bukan nilai tradisional benar dan salah (1 dan 0 Sebaliknya, mereka mengembalikan 0 dan 1). Untungnya, kita tidak perlu mengkhawatirkan hal ini saat melakukan operasi logika.
Dari bagian sebelumnya, kita telah memahami dengan jelas apa yang dimaksud dengan "nilai logis" di bawah Shell: ini adalah nilai yang dikembalikan ketika proses keluar, jika berhasil kembali, itu benar, jika tidak berhasil, itu salah.
Dan tes bersyarat hanya menggunakan
tesInstruksi tersebut digunakan untuk melakukan tes numerik (berbagai tes atribut numerik), tes string (berbagai tes atribut string), dan tes file (berbagai tes atribut file). Kami menilai apakah tes yang sesuai berhasil, dengan demikian Setelah menyelesaikan berbagai tugas rutin , ditambah dengan kombinasi logis dari berbagai tes, tugas yang lebih kompleks dapat diselesaikan.
$ jika tes 5 -eq 5;lalu echo YA; jika tidak echo TIDAK; fiYES$ jika tes 5 -ne 5;lalu echo YA;
$ jika tes -n tidak kosong;lalu gema YA; lain gema TIDAK; jika tes -z tidak kosong;lalu gema YA; lain gema TIDAK; jika tes -z ;lalu gema YA$; jika tes -n ;lalu gema YA; jika tidak, gema TIDAK;
$ jika tes -f /boot/System.map; lalu gema YA; jika tidak, gema TIDAK; fiYES$ jika tes -d /boot/System.map;
$ a=5;b=4;c=6;$ jika tes $a -eq 5 -a $b -eq 4 -a $c -eq 6; maka echo YA;
$ jika tes -f /etc/profile -o -d /etc/profile;lalu echo YA; jika tidak, echo TIDAK;
!BUKAN operasi
$ jika tes ! -f /etc/profile; lalu gema YA; jika tidak, gema fiNO
Hal di atas hanya menunjukkan
tesPerintahkan beberapa tes yang sangat sederhana yang dapat Anda lewati
tes bantuanMendapatkan
tesLebih banyak kegunaan. Perlu dicatat bahwa
tesAda beberapa perbedaan antara operasi logika di dalam perintah dan operator logika Shell.
-ADan
&&,
-HaiDan
||, keduanya tidak dapat dikacaukan. Daripada operasi
!, bandingkan di bawah ini.
$ cat > test.sh#!/bin/bashecho test[CTRL+D] # Tekan kombinasi tombol CTRL dan D untuk mengakhiri input cat, sama seperti di bawah ini, tidak perlu lagi menentukan $ chmod +x test.sh$ if test -s tes .sh -a -x tes.sh; lalu gema YA; lain gema TIDAK; jika tes -s tes.sh && tes -x tes.sh;
$ str1=uji$ str2=uji$ jika uji -z $str2 -o $str2 == $str1; lalu gema YA; jika tidak, gema fiYES$ jika uji -z $str2 ||. lalu gema YA; jika tidak, gema TIDAK;
$ i=5$ jika uji ! $i -lt 5 -a $i -ne 6; lalu gema YA; jika tidak, gema TIDAK; fiYES$ jika ! uji $i -lt 5 -a $i -eq 6; ; jika tidak, gema TIDAK; ya
Sangat mudah untuk melihat perbedaan di antara keduanya,
-ADan
-HaiSebagai parameter dari perintah tes, ini digunakan di dalam perintah tes, dan
&&Dan
||Ini digunakan untuk menghitung nilai kembalian tes,
!Umum untuk keduanya. Yang perlu mendapat perhatian adalah:
Terkadang hal itu tidak diperlukan
!operator, seperti
-persamaanDan
-neSebaliknya, ini dapat digunakan untuk menguji apakah dua nilai sama;
-zDan
-NIni juga sesuai dan digunakan untuk menguji apakah string tertentu kosong.
ada
Pestadi dalam,
tesPerintah dapat diganti dengan operator [], namun perlu diperhatikan bahwa [
Setelah itu dengan] perlu diawali dengan spasi tambahan
Saat menguji sebuah string, disarankan agar semua variabel diapit tanda kutip ganda untuk mencegah situasi di mana hanya ada parameter pengujian dan tidak ada konten pengujian saat konten variabel kosong.
Di bawah ini kami menggunakan contoh untuk menunjukkan tiga tindakan pencegahan di atas:
-neDan
-persamaanSejalan dengan itu, terkadang kita bisa mengabaikannya
!Operasi
$ i=5$ jika tes $i -eq 5; kemudian echo YA; jika tidak echo TIDAK; fiYES$ jika tes $i -eq 5; lalu gema YA; jika tidak, gema TIDAK;
menggunakan
[ ]dapat menggantikan
tes, itu akan terlihat jauh lebih “indah”
$ jika [ $i -eq 5 ]; lalu gema YA; lain gema TIDAK; jika [ $i -gt 4 ] && [ $i -lt 6 ];
Ingatlah untuk menambahkan beberapa variabel string
,Ingat[Setelah itu dengan
]Tambahkan spasi ekstra sebelumnya
$str=$ jika [ $str = test]; lalu echo YA; jika tidak echo TIDAK; fi-bash: [: hilang `]'NO$ jika [ $str = test ]; bash: [: =: operator unary diharapkanNO$ jika [ $str = test ]; lalu gema YA jika tidak, gema fiNO;
Pada titik ini, pengujian bersyarat telah diperkenalkan. Daftar perintah diperkenalkan di bawah ini. Faktanya, kami telah menggunakannya di atas, yaitu kombinasi dari beberapa perintah pengujian
&&,
||Dan
!Urutan perintah gabungan. Urutan perintah ini secara efektif menggantikan
jika/makastruktur cabang bersyarat. Tidak sulit untuk memikirkan pertanyaan pilihan ganda berikut yang sering kita lakukan dalam pemrograman bahasa C (contoh yang sangat membosankan, namun bermakna): Apakah pertanyaan berikut akan dicetak?
J, kalau di print bakal di print apa?
#termasuk <stdio.h>int main(){ int i, j; i=5;j=1; jika ((i==5) && (j=5)) printf(%dn, j); kembali 0;}
Mudah untuk mengetahui bahwa angka 5 akan dicetak karena
saya==5Kondisi ini berlaku, dan seterusnya
&&, untuk menilai apakah seluruh kondisi terpenuhi, kita harus membuat penilaian berikutnya, namun penilaian ini bukanlah penilaian konvensional, melainkan penilaian pertama.
JUbah menjadi 5 lalu ubah menjadi nilai sebenarnya, sehingga kondisinya benar dan 5 tercetak. Oleh karena itu, kalimat ini dapat diartikan sebagai: Jika
Sayasama dengan 5, lalu masukkan
JBerikan nilai 5 jika
Jlebih besar dari 1 (karena sebelumnya sudah benar), lalu print out
Jnilai. Gunakan dengan cara ini
&&Pernyataan penilaian gabungan menggantikan dua
jikaPernyataan cabang bersyarat.
Hal ini justru didasarkan pada sifat unik dari operasi logika yang dapat kita lewati
&&,
||untuk menggantikan
jika/makaTunggu struktur cabang bersyarat, sehingga menghasilkan daftar perintah.
Aturan eksekusi daftar perintah sesuai dengan aturan operasi penggunaan operasi logis
&&Untuk perintah yang terhubung, jika yang pertama berhasil kembali, perintah berikut akan dijalankan, jika tidak, gunakan
||Jika perintah yang terhubung berhasil dikembalikan, perintah berikutnya tidak akan dijalankan, dan sebaliknya.
$ ping -c 1 www.lzu.edu.cn -W 1 && echo =======terhubung========
Timbul pertanyaan yang sangat menarik, yaitu yang telah kami sebutkan di atas: mengapa harus program C
utama()Apakah fungsinya mengembalikan 0 di akhir? Jika tidak, apa konsekuensi memasukkan program semacam ini ke dalam daftar perintah? Tulis sendiri program C sederhana, lalu masukkan ke dalam daftar perintah untuk melihatnya.
Terkadang daftar perintah digunakan sebagai gantinya
jika/makaStruktur cabang bersyarat dapat menyimpan beberapa kode dan membuat program lebih indah dan mudah dibaca, misalnya:
#!/bin/bashecho $#echo $1if [ $# -eq 1 ] && (echo $1 | grep ^[0-9]*$ >/dev/null);lalu echo YESfi
Catatan: Contoh di atas mengharuskan jumlah parameter adalah 1 dan tipenya numerik.
Plus
keluar 1, kami akan menghilangkannya
jika/makastruktur
#!/bin/bashecho $#echo $1! ([ $# -eq 1 ] && (echo $1 | grep ^[0-9]*$ >/dev/null)) && keluar 1echo YA
Setelah pemrosesan ini, penilaian parameter program hanya memerlukan sebaris kode sederhana, dan menjadi lebih indah.
Bagian ini memperkenalkan operasi logis, pengujian bersyarat, dan daftar perintah dalam pemrograman Shell.