Mantık
27. Bölümde keşfettiğimiz gibi, (( )) bileşik komut, çeşitli karşılaştırma operatörlerini destekler. Mantığı değerlendirmek için kullanılabilecek birkaç tane daha var. İşte tam liste:
Tablo 34-6: Karşılaştırma Operatörleri
Operatör Açıklaması
Operatör Açıklaması
<= Küçük veya eşit
![]()
>= Büyüktür veya eşittir
![]()
< Daha az
![]()
> Daha büyük
![]()
![]()
== Eşittir
![]()
!= Eşit değil
![]()
&& Mantıksal VE
![]()
|| mantıksal VEYA
![]()
ifade1?ifade2:ifade3 Karşılaştırma (üçlü) operatörü. eğer ifade ifade1
sıfırdan farklı olarak değerlendirilir (aritmetik doğru) o zaman ifade2, Başka ifade3.
![]()
Mantıksal işlemler için kullanıldığında, ifadeler aritmetik mantığın kurallarına uyar; yani sıfır olarak değerlendirilen ifadeler yanlış, sıfır olmayan ifadeler ise doğru kabul edilir. NS (( )) bileşik komut, sonuçları kabuğun normal çıkış kodlarına eşler:
[ben@linuxbox ~]$ eğer ((1)); sonra "true" yankısı; else "yanlış" yankısı; fi
gerçek
[ben@linuxbox ~]$ eğer ((0)); sonra "true" yankısı; else "yanlış" yankısı; fi
yanlış
[ben@linuxbox ~]$ eğer ((1)); sonra "true" yankısı; else "yanlış" yankısı; fi
gerçek
[ben@linuxbox ~]$ eğer ((0)); sonra "true" yankısı; else "yanlış" yankısı; fi
yanlış
Mantıksal operatörlerin en tuhafı, üçlü operatör. Bu operatör (C programlama dilindekinden sonra modellenmiştir) bağımsız bir mantıksal test gerçekleştirir. Bir tür if/then/else ifadesi olarak kullanılabilir. Üç aritmetik ifadeye etki eder (dizeler çalışmaz) ve ilk ifade doğruysa (veya sıfır değilse) ikinci ifade gerçekleştirilir. Aksi takdirde, üçüncü ifade gerçekleştirilir. Bunu komut satırında deneyebiliriz:
[ben@linuxbox ~]$ a = 0 [ben@linuxbox ~]$ ((a<1?++a:--a)) [ben@linuxbox ~]$ yankı $a
1
[ben@linuxbox ~]$ ((a<1?++a:--a))
[ben@linuxbox ~]$ yankı $a
0
[ben@linuxbox ~]$ a = 0 [ben@linuxbox ~]$ ((a<1?++a:--a)) [ben@linuxbox ~]$ yankı $a
1
[ben@linuxbox ~]$ ((a<1?++a:--a))
[ben@linuxbox ~]$ yankı $a
0
Burada üçlü bir operatörü iş başında görüyoruz. Bu örnek bir geçiş uygular. Operatör her gerçekleştirildiğinde, değişkenin değeri a sıfırdan bire veya tam tersine geçer.
Lütfen ifadeler içinde atama yapmanın kolay olmadığını unutmayın.
teşebbüs edildiğinde, darbe bir hata bildirecektir:
[ben@linuxbox ~]$ a = 0
[ben@linuxbox ~]$ ((a<1?a+=1:a-=1))
bash: ((: a<1?a+=1:a-=1: değişken olmayana atama denendi (hata belirteci "-=1")
[ben@linuxbox ~]$ a = 0
[ben@linuxbox ~]$ ((a<1?a+=1:a-=1))
bash: ((: a<1?a+=1:a-=1: değişken olmayana atama denendi (hata belirteci "-=1")
Bu sorun, atama ifadesi parantez içine alınarak azaltılabilir:
[ben@linuxbox ~]$ ((a<1?(a+=1):(a-=1)))
[ben@linuxbox ~]$ ((a<1?(a+=1):(a-=1)))
Daha sonra, basit bir sayı tablosu üreten bir komut dosyasında aritmetik operatörleri kullanmanın daha eksiksiz bir örneğini görüyoruz:
#! / Bin / bash
# aritmetik döngü: aritmetik operatörlerin bittiğini gösteren komut dosyası=0
a = 0
printf "a\ta**2\ta**3\n" printf "=\t====\t====\n"
kadar ((bitti)); b=$((a**2)) yap
c=$((a**3))
printf "%d\t%d\t%d\n" $a $b $c ((a<10?++a:(bitmiş=1)))
yapılmış
#! / Bin / bash
# aritmetik döngü: aritmetik operatörlerin bittiğini gösteren komut dosyası=0
a = 0
printf "a\ta**2\ta**3\n" printf "=\t====\t====\n"
kadar ((bitti)); b=$((a**2)) yap
c=$((a**3))
printf "%d\t%d\t%d\n" $a $b $c ((a<10?++a:(bitmiş=1)))
yapılmış
Bu komut dosyasında, değerini temel alan bir kadar döngüsü uygularız. bitmiş değişken. Başlangıçta değişken sıfıra ayarlanır (aritmetik yanlış) ve sıfır olmayana kadar döngüye devam ederiz. Döngü içinde sayaç değişkeninin karesini ve küpünü hesaplıyoruz
a. Döngünün sonunda sayaç değişkeninin değeri değerlendirilir. 10'dan (maksimum yineleme sayısı) küçükse, bir artırılır, aksi takdirde tamamlanan değişkene bir değeri verilir, bitiş aritmetik olarak doğru yapılır, böylece döngü sonlandırılır. Komut dosyasını çalıştırmak şu sonucu verir:
[ben@linuxbox ~]$ aritmetik döngüsü
[ben@linuxbox ~]$ aritmetik döngüsü
a
= 0
1
2
3
4
5
6
7
8
9
10
a
= 0
1
2
3
4
5
6
7
8
9
10

bir**2 bir**3
========
bir**2 bir**3
========
0
1
4
9
16
25
36
49
64
81
100
0
1
4
9
16
25
36
49
64
81
100
0
1
8
27
64
125
216
343
512
729
1000
0
1
8
27
64
125
216
343
512
729
1000
Dökümanlar