Bash'te Koşullu Mantıkta Nasıl Ustalaşılır?

Bash Te Kosullu Mantikta Nasil Ustalasilir



Koşullu mantığın kullanımı herhangi bir programlama dilinin çok önemli bir parçasıdır. Koşullu mantık, programlama problemlerini çözmek için Bash'te farklı şekillerde uygulanabilir. Dize ve sayısal değerleri karşılaştırmak, değişken içeriğini kontrol etmek, dosya veya dizinin varlığını kontrol etmek vb. için farklı türlerdeki 'if' ve 'case' ifadeleri aracılığıyla Bash'te koşullu mantığı kullanma yöntemleri bu eğitimde gösterilmektedir. .

İçerik listesi:

  1. “If” İfadesinin Kullanımı
  2. “If-Else” İfadesinin Kullanımı
  3. “If-Elif-Else” İfadesinin Kullanımı
  4. Boş Bir Değişkeni Kontrol Etmek İçin “If” İfadesinin Kullanımı
  5. Mantıksal Operatörle “If” İfadesinin Kullanımı
  6. İç içe geçmiş “If” İfadelerinin Kullanımı
  7. Dosya Varlığını Kontrol Etmek İçin “If” İfadesinin Kullanımı
  8. Dizin Varlığını Kontrol Etmek İçin “If” İfadesinin Kullanımı
  9. Regex ile “If” İfadesinin Kullanımı
  10. “Vaka” İfadesinin Kullanımı

“If” İfadesinin Kullanımı

Bu örnek Bash'te 'if' ifadesinin basit kullanımını göstermektedir. Bash'teki sayısal değerleri karşılaştırmak için altı tür karşılaştırma operatörü kullanılabilir. Bunlar “-eq” (eşit), “-ne” (eşit değil), “-le” (eşitten küçük), “-ge” (eşitten büyük), “-lt” (küçük) ve “ -gt” (büyüktür). “-lt” ve “-eq” kullanımları, sayının 99'dan küçük olup olmadığı veya “-lt” operatörü kullanılarak kontrol edilmemiş olması durumunda aşağıdaki kodda gösterilmektedir. Sayının çift veya tek olup olmadığı “-eq” operatörü tarafından kontrol edilir.







#!/bin/bash

#Sayısal bir değer atayın

( ( sayı = elli ) )

#'if' ifadesini kullanarak sayısal değeri kontrol edin

eğer [ $sayı -lt 99 ]

Daha sonra

Eko 'Numara geçerli.'

olmak

#Sayının çift olup olmadığını kontrol et

eğer [ $ ( ( $sayı % 2 ) ) -eşit 0 ]

Daha sonra

Eko 'Sayı çifttir.'

olmak

Çıktı :



Önceki betiği çalıştırdıktan sonra aşağıdaki çıktı görünür:



  p1





Başa gitmek

“If-Else” İfadesinin Kullanımı

Aşağıdaki scriptte “if-else” ifadesinin kullanımı gösterilmiştir. Kullanıcıdan bir string değeri alınır ve “if-else” ifadesi kullanılarak değerin “MAVİ” olup olmadığı kontrol edilir.



#!/bin/bash

#Kullanıcıdan bir dize değeri al

Okumak -P 'Favori renginizi girin:' renk

#'if-else' ifadesini kullanarak dize değerini kontrol edin

eğer [ ${renk^^} == 'MAVİ' ]

Daha sonra

Eko 'Güzel, Mavi rengi mevcuttur.'

başka

Eko ' $renk mevcut değil.'

olmak

Çıktı :

Giriş olarak “kırmızı” alınırsa önceki komut dosyası çalıştırıldıktan sonra aşağıdaki çıktı görünür:

  p2-1

Giriş olarak “mavi” alınırsa önceki komut dosyası çalıştırıldıktan sonra aşağıdaki çıktı görünür:

  s2-2

Başa gitmek

“If-Elif-Else” İfadesinin Kullanımı

Aşağıdaki scriptte if-elif-else ifadesinin kullanımı gösterilmiştir. Kullanıcıdan bir sayı alınır ve herhangi bir eşleşme bulunana kadar farklı değerlerle kontrol edilir. Herhangi bir eşleşme bulunursa ilgili mesaj yazdırılır. Eşleşme bulunamazsa varsayılan mesaj yazdırılır.

#!/bin/bash

#Kullanıcıdan id değerini al

Okumak -P 'Seri numaranızı girin:' seri

#'if-elif-else' ifadesini kullanarak giriş değerini kontrol edin

eğer [ $seri == '4523' ]

Daha sonra

Eko 'A grubunda seçildiniz.'

elif [ $seri == '8723' ]

Daha sonra

Eko 'B grubunda seçildiniz.'

elif [ $seri == '3412' ]

Daha sonra

Eko 'C grubunda seçildiniz.'

başka

Eko 'Seçilmedin' .

olmak

Çıktı:

Betiği 8723 değeriyle çalıştırdıktan sonra aşağıdaki çıktı görünür:

  s3-1

Betiği 9078 değeriyle çalıştırdıktan sonra aşağıdaki çıktı görünür:

  s3-2

Başa gitmek

Boş Bir Değişkeni Kontrol Etmek İçin “If” İfadesinin Kullanımı

Bir değişkenin boş olup olmadığını “if” ifadesi kullanmadan kontrol etme yöntemi aşağıdaki komut dosyasında gösterilmektedir. Bu görevi gerçekleştirmek için “if” ifadesinde “-z” seçeneği kullanılır.

#!/bin/bash

#Kullanıcıdan id değerini al

Okumak -P 'Seri numaranızı girin:' seri

#Değişkenin boş olup olmadığını kontrol edin

eğer [ ! -İle $seri ]

Daha sonra

#'if-elif-else' ifadesini kullanarak giriş değerini kontrol edin

eğer [ $seri == '690' ]

Daha sonra

Eko 'Takım-1'e seçildiniz.'

elif [ $seri == '450' ]

Daha sonra

Eko 'Takım-2'ye seçildiniz.'

başka

Eko 'Seçilmedin' .

olmak

başka

Eko 'Seri numarası verilmedi.'

olmak

Çıktı :

Betiği 690 değeriyle çalıştırdıktan sonra aşağıdaki çıktı görünür:

  s4-1

Herhangi bir giriş değeri alınmazsa, komut dosyası çalıştırıldıktan sonra aşağıdaki çıktı görüntülenir:

  s4-2

Başa gitmek

“If” İfadesinin Mantıksal Operatörlerle Kullanımı

Bash koşullu ifadesinde üç tür mantıksal operatör kullanılabilir. Bunlar mantıksal VEYA (||), mantıksal VE (&&) ve mantıksal DEĞİL (!)'dir. Kullanıcıdan bir kod değeri alınır. Giriş değeri boş değilse, değer mantıksal VEYA kullanılarak iki kod değeriyle kontrol edilir. Değer herhangi bir kodla eşleşirse ilgili mesaj yazdırılır. Eşleşen kod bulunamazsa varsayılan mesaj yazdırılır.

#!/bin/bash

#Kullanıcıdan ders kodunu al

Okumak -P 'Ders kodunu girin:' kod

#Değişkenin boş olup olmadığını kontrol edin

eğer [ ! -İle $kod ]

Daha sonra

#'if-elif-else' ifadesini kullanarak giriş değerini kontrol edin

eğer [ [ $kod == 'CSE-106' || $kod == 'CSE-108' ] ]

Daha sonra

Eko 'CSE kursu.'

elif [ [ $kod == 'BBA-203' || $kod == 'BBA-202' ] ]

Daha sonra

Eko 'BBA kursu.'

başka

Eko 'Geçersiz ders kodu.'

olmak

başka

Eko 'Ders kodu verilmemektedir.'

olmak

Çıktı :

Betiği “CSE-108” giriş değeriyle çalıştırdıktan sonra aşağıdaki çıktı görünür:

  p5-1

Betiği “BBA-56” giriş değeriyle çalıştırdıktan sonra aşağıdaki çıktı görünür:

  s5-2

Başa gitmek

İç içe geçmiş “If” İfadelerinin Kullanımı

Bir “if” koşulu başka bir “if” koşulunun içinde kullanıldığında buna iç içe geçmiş “if” ifadesi denir. İç içe geçmiş “if” ifadesini kullanma yöntemi aşağıdaki komut dosyasında gösterilmektedir. Kullanıcıdan iki adet işaret değeri alınır. Giriş değerleri boş değilse, ilk “if” koşulu “$teori” değerinin 60'a eşit veya büyük olup olmadığını kontrol eder. İlk 'if' koşulu 'true' değerini döndürürse, ikinci 'if' koşulu '$lab' değerinin 50'den büyük veya eşit olup olmadığını kontrol eder. İkinci 'if' koşulu da 'true' değerini döndürürse bir başarı mesajı yazdırılır. Aksi takdirde bir arıza mesajı yazdırılır.

#!/bin/bash

#Teori notunu al

Okumak -P 'Teori işaretini girin:' teori

#Laboratuvar işaretini al

Okumak -P 'Laboratuvar işaretini girin:' laboratuvar

#Değişkenlerin boş olup olmadığını kontrol edin

eğer [ [ ! -İle $teori && ! -İle $laboratuvar ] ]

Daha sonra

#İç içe 'if' ifadesini kullanarak giriş değerlerini kontrol edin

eğer [ $teori -ge 60 ]

Daha sonra

eğer [ $laboratuvar -ge elli ]

Daha sonra

Eko 'Geçtin.'

başka

Eko 'Başarısız oldun.'

olmak

başka

Eko 'Başarısız oldun.'

olmak

başka

Eko 'Teori veya laboratuvar puanı boş.'

olmak

Çıktı :

Giriş değerlerinden her ikisi veya biri boşsa aşağıdaki çıktı görünür:

  s6-1

78 teori puanı, 45 ise laboratuvar puanı alınırsa aşağıdaki çıktı ortaya çıkar. Burada ikinci 'if' koşulu 'false' değerini döndürür:

  s6-2

67 teori puanı, 56 ise laboratuvar puanı olarak alınırsa aşağıdaki çıktı ortaya çıkar. Burada her iki 'if' koşulu da 'true' değerini döndürür:

  s6-3

Teorik not olarak 50, laboratuvar notu olarak 80 alınırsa aşağıdaki çıktı ortaya çıkar. Burada ilk 'if' koşulu 'false' değerini döndürür:

  s6-4

Başa gitmek

Dosya Varlığını Kontrol Etmek İçin “If” İfadesinin Kullanımı

Dosyanın varlığı bash betiği tarafından iki şekilde kontrol edilebilir. Bunlardan biri “-f” operatörünü “[]” parantezleriyle kullanmaktır. Bir diğeri ise “test” komutunu ve “-f” operatörünü kullanmaktır. Bir dosya adı alınır ve “-f” operatörü ile “if” koşulunu kullanarak dosyanın varlığını kontrol eder. Daha sonra başka bir dosya adı alınır ve “test” komutu ve “-f” operatörü ile “if” ifadesi kullanılarak dosyanın varlığı kontrol edilir.

#!/bin/bash

#Dosya adını al

Okumak -P 'Bir dosya adı girin:' fn1

#`test`i kullanmadan dosyanın var olup olmadığını kontrol et

eğer [ -F $fn1 ]

Daha sonra

Eko ' $fn1 dosya var.'

başka

Eko ' $fn1 dosya bulunmuyor.'

olmak

#Yeni satır ekle

Eko

#Başka bir dosya adı al

Okumak -P 'Başka bir dosya adı girin:' fn2

#`test'i kullanarak dosyanın var olup olmadığını kontrol et

eğer Ölçek -F $fn2 ; Daha sonra

Eko ' $fn2 dosya var.'

#`test'i kullanarak dosyanın boş olup olmadığını kontrol et

eğer Ölçek -İle $fn2 ; Daha sonra

Eko ' $fn2 dosya boş.'

başka

Eko ' $fn2 Dosya boş değil.'

olmak

başka

Eko ' $fn2 dosya bulunmuyor.'

olmak

Çıktı :

Dosya adı olarak “test.txt” ve “testing.txt” alınarak script çalıştırıldığında aşağıdaki çıktı ortaya çıkıyor. Çıktıya göre her iki dosya da geçerli konumda mevcut ve “testing.txt” dosyası boş:

  s7-1

Dosya adı olarak “f1.txt” ve “test.txt” alınarak script çalıştırıldığında aşağıdaki çıktı ortaya çıkıyor. Çıktıya göre “f1.txt” dosyası mevcut konumda bulunmuyor ve “test.txt” dosyası boş değil:

  s7-2

Başa gitmek

Dizin Varlığını Kontrol Etmek İçin “If” İfadesinin Kullanımı

Dizinin varlığı Bash betiği tarafından dosya gibi iki şekilde kontrol edilebilir. Bunlardan biri “-d” operatörünü “[]” parantezleriyle kullanmaktır. Bir diğeri ise “test” komutunu ve “-d” operatörünü kullanmaktır. Bir dizin adı alınır ve “-d” operatörü ile “if” koşulunu kullanarak dizinin varlığını kontrol eder. Daha sonra başka bir dizin adı alınır ve “test” komutu ve “-d” operatörü ile “if” ifadesi kullanılarak dosyanın varlığı kontrol edilir.

#!/bin/bash

#Bir dizin adı al

Okumak -P 'Bir dizin adı girin:' sen1

#`test`i kullanmadan dizinin var olup olmadığını kontrol edin

eğer [ -D $dir1 ]

Daha sonra

Eko ' $dir1 dizin mevcut.'

başka

Eko ' $dir1 dizin mevcut değil.'

olmak

#Yeni satır ekle

Eko

#Başka bir dizin adı al

Okumak -P 'Başka bir dizin adı girin:' yön2

#`test'i kullanarak dosyanın var olup olmadığını kontrol et

eğer Ölçek -D $dir2

Daha sonra

Eko ' $dir2 dizin mevcut.'

başka

Eko ' $dir2 dizin mevcut değil.'

olmak

Çıktı :

Betiği “temp” ve “files” dizin adlarıyla çalıştırdıktan sonra aşağıdaki çıktı ortaya çıkıyor. Çıktıya göre her iki dizin de geçerli konumda mevcut. Daha sonra dizinlerin içeriğini kontrol etmek için “ls” komutu çalıştırılır:

  s8-1

Betiği “testing” ve “new” dizin adlarıyla çalıştırdıktan sonra aşağıdaki çıktı görünür. Çıktıya göre her iki dizin de geçerli konumda mevcut değil. Daha sonra “ls” komutunun çıktısı her iki dizinin de mevcut olmadığını gösterir:

  s8-2

Başa gitmek

Regex ile “If” İfadesinin Kullanımı

Aşağıdaki komut dosyası, normal ifadeyle 'if' ifadesini kullanarak giriş verilerini doğrulama yöntemini gösterir. Burada kullanıcıdan iki giriş değeri alınır ve “$bookname” ve “$bookprice” değişkenlerinde saklanır. Kodda 'if' koşulu, '$bookname' değişkeninin tüm alfabetik karakterleri içerdiğini ve '$bookprice' değişkeninin bir sayı içerip içermediğini kontrol etmek için kullanılır.

#!/bin/bash

#Kullanıcıdan kitabın adını ve fiyatını al

Eko -N 'Kitabın adını girin:'

Okumak kitap adı

Eko -N 'Kitap fiyatını girin:'

Okumak kitap fiyatı

#Kitap adının yalnızca alfabeyi içerdiğini kontrol edin

eğer ! [ [ ' $kitap adı ' =~ [ A-Za-z ] ] ] ; Daha sonra

Eko 'Kitap adı geçersiz.'

başka

Eko 'Kitap adı geçerli.'

olmak

#Kitap fiyatının yalnızca rakam içerdiğini kontrol edin

eğer ! [ [ ' $kitap fiyatı ' =~ [ 0 - 9 ] ] ] ; Daha sonra

Eko 'Kitap fiyatı yalnızca rakam içerebilir.'

başka

Eko 'Kitap fiyatı geçerlidir.'

olmak

Çıktı :

Kitap adı olarak “Bash Programlama” ve kitap fiyatı olarak 78 giriş değerleriyle betiği çalıştırdıktan sonra aşağıdaki çıktı görünür:

  s9-1

Kitap adı olarak 90 ve kitap fiyatı olarak “Bash” giriş değerleriyle betiği çalıştırdıktan sonra aşağıdaki çıktı görünür:

  s9-2

Başa gitmek

“Vaka” İfadesinin Kullanımı

“case” ifadesi “if-elif-else” ifadesinin alternatifidir ancak “if-elif-else” ifadesinin tüm görevleri “case” ifadesi kullanılarak yapılamaz. “case” ifadesinin basit kullanımı aşağıdaki komut dosyasında gösterilmektedir. Kullanıcıdan güncel ay değeri olarak sayısal bir değer alınır. Daha sonra “case” ifadesinde eşleşen bir değer bulunursa ilgili ay yazdırılır. Aksi halde varsayılan mesaj yazdırılır.

#!/bin/bash

#Mevcut ayın değerini sayı olarak al

Okumak -P 'Bugünün ayını sayı olarak girin:' b_ay

#Ayın adını yazdırmadan önce metni yazdır

Eko -N 'Geçerli ayın adı:'

#Girdiye göre eşleşen ayın adını bulun ve yazdırın

dava $b_ay içinde

1 | 01 ) Eko 'Ocak.' ;;

2 | 02 ) Eko 'Şubat.' ;;

3 | 03 ) Eko 'Mart.' ;;

4 | 04 ) Eko 'Nisan.' ;;

5 | 05 ) Eko 'Mayıs.' ;;

6 | 06 ) Eko 'Haziran.' ;;

7 | 07 ) Eko 'Temmuz.' ;;

8 | 08 ) Eko 'Ağustos.' ;;

9 | 09 ) Eko 'Eylül.' ;;

10 ) Eko 'Ekim.' ;;

on bir ) Eko 'Kasım.' ;;

12 ) Eko 'Aralık.' ;;

* ) Eko 'bulunamadı.' ;;

kaçış

Çıktı :

Betiği 6 değeriyle çalıştırdıktan sonra aşağıdaki çıktı görünür:

  s10-1

Betiği 09 değeriyle çalıştırdıktan sonra aşağıdaki çıktı görünür:


  s.10-2

Betiği 14 değeriyle çalıştırdıktan sonra aşağıdaki çıktı görünür:

  s.10-3

Başa gitmek

Çözüm

Bu eğitimin 10 örneğinde 'if' ve 'case' ifadelerinin kullanıldığı koşullu mantığın farklı kullanımları gösterilmektedir. Bu eğitimi okuduktan sonra yeni Bash kullanıcıları Bash'te koşullu mantığı kullanma kavramını anlayacaktır.